SF.net SVN: geany: [1848] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Mon Sep 3 16:09:53 UTC 2007


Revision: 1848
          http://geany.svn.sourceforge.net/geany/?rev=1848&view=rev
Author:   ntrel
Date:     2007-09-03 09:09:53 -0700 (Mon, 03 Sep 2007)

Log Message:
-----------
Add text argument for document_new_file(), so that it's independent
from filetype templates.
Make File->New create a blank document, rather than using the None
filetype template.
Add None option for the 'New with Template' menu commands.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/plugins/classbuilder.c
    trunk/src/callbacks.c
    trunk/src/document.c
    trunk/src/document.h
    trunk/src/keybindings.c
    trunk/src/main.c
    trunk/src/plugindata.h
    trunk/src/socket.c
    trunk/src/templates.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/ChangeLog	2007-09-03 16:09:53 UTC (rev 1848)
@@ -3,6 +3,14 @@
  * src/keybindings.c:
    Set copy lines default KB to Ctrl-Shift-C.
    Set cut lines default KB to Ctrl-Shift-X.
+ * plugins/classbuilder.c, src/templates.c, src/keybindings.c,
+   src/plugindata.h, src/callbacks.c, src/document.c, src/document.h,
+   src/main.c, src/socket.c:
+   Add text argument for document_new_file(), so that it's independent
+   from filetype templates.
+   Make File->New create a blank document, rather than using the None
+   filetype template.
+   Add None option for the 'New with Template' menu commands.
 
 
 2007-08-31  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>

Modified: trunk/plugins/classbuilder.c
===================================================================
--- trunk/plugins/classbuilder.c	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/plugins/classbuilder.c	2007-09-03 16:09:53 UTC (rev 1848)
@@ -740,7 +740,7 @@
 	if (! utils->str_equal(class_info->source, ""))
 	{
 		text = get_template_class_source(class_info);
-		idx = documents->new_file(class_info->source, NULL);
+		idx = documents->new_file(class_info->source, NULL, NULL);
 		scintilla->set_text(doc_list[idx].sci, text);
 		g_free(text);
 	}
@@ -748,7 +748,7 @@
 	if (! utils->str_equal(class_info->header, ""))
 	{
 		text = get_template_class_header(class_info);
-		idx = documents->new_file(class_info->header, NULL);
+		idx = documents->new_file(class_info->header, NULL, NULL);
 		scintilla->set_text(doc_list[idx].sci, text);
 		g_free(text);
 	}

Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/src/callbacks.c	2007-09-03 16:09:53 UTC (rev 1848)
@@ -193,7 +193,7 @@
 on_new1_activate                       (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-	document_new_file(NULL, NULL);
+	document_new_file(NULL, NULL, NULL);
 }
 
 
@@ -554,7 +554,7 @@
 on_toolbutton8_clicked                 (GtkToolButton   *toolbutton,
                                         gpointer         user_data)
 {
-	document_new_file(NULL, NULL);
+	document_new_file(NULL, NULL, NULL);
 }
 
 // open file
@@ -1185,7 +1185,7 @@
 on_toolbutton_new_clicked              (GtkToolButton   *toolbutton,
                                         gpointer         user_data)
 {
-	document_new_file(NULL, NULL);
+	document_new_file(NULL, NULL, NULL);
 }
 
 

Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/src/document.c	2007-09-03 16:09:53 UTC (rev 1848)
@@ -445,21 +445,23 @@
 }
 
 
-/* This creates a new document, by clearing the text widget and setting the
-   current filename to filename or NULL. If ft is NULL and filename is not NULL, then the filetype
-   will be guessed from the given filename.
-   filename is expected in UTF-8 encoding. */
-gint document_new_file(const gchar *filename, filetype *ft)
+/* Create a new document.
+ * filename is either the UTF-8 file name, or NULL.
+ * If ft is NULL and filename is not NULL, then the filetype will be guessed
+ * from the given filename.
+ * text is the contents of the new file, or NULL.
+ * Returns: idx of new file in doc_list. */
+gint document_new_file(const gchar *filename, filetype *ft, const gchar *text)
 {
 	gint idx = document_create_new_sci(filename);
-	gchar *template = templates_get_template_new_file(ft);
 
 	g_assert(idx != -1);
 
 	sci_set_undo_collection(doc_list[idx].sci, FALSE); // avoid creation of an undo action
-	sci_clear_all(doc_list[idx].sci);
-	sci_set_text(doc_list[idx].sci, template);
-	g_free(template);
+	if (text)
+		sci_set_text(doc_list[idx].sci, text);
+	else
+		sci_clear_all(doc_list[idx].sci);
 
 #ifdef G_OS_WIN32
 	sci_set_eol_mode(doc_list[idx].sci, SC_EOL_CRLF);
@@ -469,6 +471,9 @@
 	sci_set_undo_collection(doc_list[idx].sci, TRUE);
 	sci_empty_undo_buffer(doc_list[idx].sci);
 
+	doc_list[idx].mtime = time(NULL);
+	doc_list[idx].changed = FALSE;
+
 	doc_list[idx].encoding = g_strdup(encodings[prefs.default_new_encoding].charset);
 	// store the opened encoding for undo/redo
 	store_saved_encoding(idx);
@@ -482,10 +487,6 @@
 		filetypes[GEANY_FILETYPES_ALL]->style_func_ptr(doc_list[idx].sci);
 	ui_set_window_title(idx);
 	build_menu_update(idx);
-
-	doc_list[idx].mtime = time(NULL);
-	doc_list[idx].changed = FALSE;
-
 	document_update_tag_list(idx, FALSE);
 	document_set_text_changed(idx);
 	ui_document_show_hide(idx); // update the document menu
@@ -2372,20 +2373,15 @@
 {
 	// create a new file and copy file content and properties
 	gint len, idx;
-	gchar *data;
+	gchar *text;
 
+	len = sci_get_length(doc_list[old_idx].sci) + 1;
+	text = (gchar*) g_malloc(len);
+	sci_get_text(doc_list[old_idx].sci, len, text);
 	// use old file type (or maybe NULL for auto detect would be better?)
-	idx = document_new_file(utf8_filename, doc_list[old_idx].file_type);
+	idx = document_new_file(utf8_filename, doc_list[old_idx].file_type, text);
+	g_free(text);
 
-	sci_set_undo_collection(doc_list[idx].sci, FALSE); // avoid creation of an undo action
-	sci_empty_undo_buffer(doc_list[idx].sci);
-
-	len = sci_get_length(doc_list[old_idx].sci) + 1;
-	data = (gchar*) g_malloc(len);
-	sci_get_text(doc_list[old_idx].sci, len, data);
-
-	sci_set_text(doc_list[idx].sci, data);
-
 	// copy file properties
 	doc_list[idx].line_wrapping = doc_list[old_idx].line_wrapping;
 	doc_list[idx].readonly = doc_list[old_idx].readonly;
@@ -2393,11 +2389,8 @@
 	document_set_encoding(idx, doc_list[old_idx].encoding);
 	sci_set_lines_wrapped(doc_list[idx].sci, doc_list[idx].line_wrapping);
 	sci_set_readonly(doc_list[idx].sci, doc_list[idx].readonly);
-	sci_set_undo_collection(doc_list[idx].sci, TRUE);
 
 	ui_document_show_hide(idx);
-
-	g_free(data);
 	return idx;
 }
 

Modified: trunk/src/document.h
===================================================================
--- trunk/src/document.h	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/src/document.h	2007-09-03 16:09:53 UTC (rev 1848)
@@ -120,20 +120,13 @@
 gboolean document_remove(guint page_num);
 
 
-/* This creates a new document, by clearing the text widget and setting the
-   current filename to filename or NULL. If ft is NULL and filename is not NULL, then the filetype
-   will be guessed from the given filename.
-   filename is expected in UTF-8 encoding. */
-gint document_new_file(const gchar *filename, filetype *ft);
+/* See document.c. */
+gint document_new_file(const gchar *filename, filetype *ft, const gchar *text);
 
 gint document_clone(gint old_idx, const gchar *utf8_filename);
 
 
-/* To open a new file, set idx to -1; filename should be locale encoded.
- * To reload a file, set the idx for the document to be reloaded; filename should be NULL.
- * Returns: idx of the opened file or -1 if an error occurred.
- * Note: If opening more than one file, document_delay_colourise() should be used before
- * and document_colourise_new() after opening to avoid unnecessary recolourising. */
+/* See document.c. */
 gint document_open_file(gint idx, const gchar *filename, gint pos, gboolean readonly,
 		filetype *ft, const gchar *forced_enc);
 

Modified: trunk/src/keybindings.c
===================================================================
--- trunk/src/keybindings.c	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/src/keybindings.c	2007-09-03 16:09:53 UTC (rev 1848)
@@ -715,7 +715,7 @@
 	switch (key_id)
 	{
 		case GEANY_KEYS_MENU_NEW:
-			document_new_file(NULL, NULL);
+			document_new_file(NULL, NULL, NULL);
 			break;
 		case GEANY_KEYS_MENU_OPEN:
 			on_open1_activate(NULL, NULL);

Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/src/main.c	2007-09-03 16:09:53 UTC (rev 1848)
@@ -553,7 +553,7 @@
 		{	// create new file if it doesn't exist
 			gint idx;
 
-			idx = document_new_file(filename, NULL);
+			idx = document_new_file(filename, NULL, NULL);
 			if (DOC_IDX_VALID(idx))
 				ui_add_recent_file(doc_list[idx].file_name);
 		}
@@ -740,7 +740,7 @@
 
 	// open a new file if no other file was opened
 	if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)) == 0)
-		document_new_file(NULL, NULL);
+		document_new_file(NULL, NULL, NULL);
 
 	ui_document_buttons_update();
 	ui_save_buttons_toggle(FALSE);

Modified: trunk/src/plugindata.h
===================================================================
--- trunk/src/plugindata.h	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/src/plugindata.h	2007-09-03 16:09:53 UTC (rev 1848)
@@ -76,7 +76,7 @@
 /* The ABI version should be incremented whenever existing fields in the plugin
  * data types below have to be changed or reordered. It should stay the same if fields
  * are only appended, as this doesn't affect existing fields. */
-static const gint abi_version = 6;
+static const gint abi_version = 7;
 
 /* This performs runtime checks that try to ensure:
  * 1. Geany ABI data types are compatible with this plugin.
@@ -170,7 +170,7 @@
 
 typedef struct DocumentFuncs
 {
-	gint	(*new_file) (const gchar *filename, struct filetype *ft);
+	gint	(*new_file) (const gchar *filename, struct filetype *ft, const gchar *text);
 	gint	(*get_cur_idx) ();
 	struct document*	(*get_current) ();
 	gboolean (*save_file)(gint idx, gboolean force);

Modified: trunk/src/socket.c
===================================================================
--- trunk/src/socket.c	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/src/socket.c	2007-09-03 16:09:53 UTC (rev 1848)
@@ -425,7 +425,7 @@
 				{	// create new file if it doesn't exist
 					gint idx;
 
-					idx = document_new_file(buf, NULL);
+					idx = document_new_file(buf, NULL, NULL);
 					if (DOC_IDX_VALID(idx))
 						ui_add_recent_file(doc_list[idx].file_name);
 					else

Modified: trunk/src/templates.c
===================================================================
--- trunk/src/templates.c	2007-09-03 12:17:58 UTC (rev 1847)
+++ trunk/src/templates.c	2007-09-03 16:09:53 UTC (rev 1848)
@@ -307,7 +307,11 @@
 on_new_with_template                   (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-	document_new_file(NULL, (filetype*) user_data);
+	filetype *ft = user_data;
+	gchar *template = templates_get_template_new_file(ft);
+
+	document_new_file(NULL, ft, template);
+	g_free(template);
 }
 
 
@@ -317,16 +321,16 @@
 	GtkWidget *template_menu = lookup_widget(app->window, "menu_new_with_template1_menu");
 	filetype_id ft_id;
 
-	for (ft_id = 0; ft_id < GEANY_FILETYPES_ALL; ft_id++)
+	for (ft_id = 0; ft_id < GEANY_MAX_FILE_TYPES; ft_id++)
 	{
 		GtkWidget *tmp_menu, *tmp_button;
 		filetype *ft = filetypes[ft_id];
 		const gchar *label = ft->title;
 
 		if (ft_templates[ft_id] == NULL)
-		{
 			continue;
-		}
+		if (ft_id == GEANY_FILETYPES_ALL)
+			label = _("None");
 		tmp_menu = gtk_menu_item_new_with_label(label);
 		tmp_button = gtk_menu_item_new_with_label(label);
 		gtk_widget_show(tmp_menu);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list