SF.net SVN: geany:[2936] branches/split-window-plugin

ntrel at users.sourceforge.net ntrel at xxxxx
Thu Sep 11 15:03:59 UTC 2008


Revision: 2936
          http://geany.svn.sourceforge.net/geany/?rev=2936&view=rev
Author:   ntrel
Date:     2008-09-11 15:03:58 +0000 (Thu, 11 Sep 2008)

Log Message:
-----------
Add plugin signal "document-close", sent just before a document is
closed.

Modified Paths:
--------------
    branches/split-window-plugin/ChangeLog
    branches/split-window-plugin/doc/plugins.dox
    branches/split-window-plugin/src/document.c
    branches/split-window-plugin/src/geanyobject.c
    branches/split-window-plugin/src/geanyobject.h

Modified: branches/split-window-plugin/ChangeLog
===================================================================
--- branches/split-window-plugin/ChangeLog	2008-09-10 14:49:16 UTC (rev 2935)
+++ branches/split-window-plugin/ChangeLog	2008-09-11 15:03:58 UTC (rev 2936)
@@ -1,3 +1,11 @@
+2008-09-11  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/geanyobject.c, src/geanyobject.h, src/document.c,
+   doc/plugins.dox:
+   Add plugin signal "document-close", sent just before a document is
+   closed.
+
+
 2008-09-10  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * plugins/splitwindow.c:

Modified: branches/split-window-plugin/doc/plugins.dox
===================================================================
--- branches/split-window-plugin/doc/plugins.dox	2008-09-10 14:49:16 UTC (rev 2935)
+++ branches/split-window-plugin/doc/plugins.dox	2008-09-11 15:03:58 UTC (rev 2936)
@@ -121,6 +121,17 @@
  *  @param user_data user data.
  *  @endsignaldef
  *
+ *  @signaldef document-close
+ *  @signalproto
+ *  void user_function(GObject *obj, GeanyDocument *doc, gpointer user_data);
+ *  @endsignalproto
+ *  @signaldesc
+ *  Sent before closing a document.
+ *  @param obj a GeanyObject instance, should be ignored.
+ *  @param doc the document about to be closed.
+ *  @param user_data user data.
+ *  @endsignaldef
+ *
  *  @signaldef project-open
  *  @signalproto
  *  void user_function(GObject *obj, GKeyFile *config, gpointer user_data);

Modified: branches/split-window-plugin/src/document.c
===================================================================
--- branches/split-window-plugin/src/document.c	2008-09-10 14:49:16 UTC (rev 2935)
+++ branches/split-window-plugin/src/document.c	2008-09-11 15:03:58 UTC (rev 2936)
@@ -472,53 +472,60 @@
 gboolean document_remove_page(guint page_num)
 {
 	GeanyDocument *doc = document_get_from_page(page_num);
+	Document *fdoc = DOCUMENT(doc);
 
-	if (doc != NULL)
+	if (doc == NULL)
 	{
-		Document *fdoc = DOCUMENT(doc);
+		geany_debug("Error: page_num: %d", page_num);
+		return FALSE;
+	}
+	
+	if (doc->changed && ! dialogs_show_unsaved_file(doc))
+	{
+		return FALSE;
+	}
+	
+	/* tell any plugins that the document is about to be closed */
+	if (geany_object)
+	{
+		g_signal_emit_by_name(geany_object, "document-close", doc);
+	}
 
-		if (doc->changed && ! dialogs_show_unsaved_file(doc))
-		{
-			return FALSE;
-		}
-		/* Checking real_path makes it likely the file exists on disk */
-		if (! main_status.closing_all && doc->real_path != NULL)
-			ui_add_recent_file(doc->file_name);
+	/* Checking real_path makes it likely the file exists on disk */
+	if (! main_status.closing_all && doc->real_path != NULL)
+		ui_add_recent_file(doc->file_name);
 
-		notebook_remove_page(page_num);
-		treeviews_remove_document(doc);
-		navqueue_remove_file(doc->file_name);
-		msgwin_status_add(_("File %s closed."), DOC_FILENAME(doc));
-		g_free(doc->encoding);
-		g_free(fdoc->saved_encoding.encoding);
-		g_free(doc->file_name);
-		g_free(doc->real_path);
-		tm_workspace_remove_object(doc->tm_file, TRUE, TRUE);
+	notebook_remove_page(page_num);
+	treeviews_remove_document(doc);
+	navqueue_remove_file(doc->file_name);
+	msgwin_status_add(_("File %s closed."), DOC_FILENAME(doc));
+	g_free(doc->encoding);
+	g_free(fdoc->saved_encoding.encoding);
+	g_free(doc->file_name);
+	g_free(doc->real_path);
+	tm_workspace_remove_object(doc->tm_file, TRUE, TRUE);
 
-		editor_destroy(doc->editor);
-		doc->editor = NULL;
+	editor_destroy(doc->editor);
+	doc->editor = NULL;
 
-		doc->is_valid = FALSE;
-		doc->file_name = NULL;
-		doc->real_path = NULL;
-		doc->file_type = NULL;
-		doc->encoding = NULL;
-		doc->has_bom = FALSE;
-		doc->tm_file = NULL;
-		document_undo_clear(doc);
-		if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) == 0)
-		{
-			treeviews_update_tag_list(NULL, FALSE);
-			/*on_notebook1_switch_page(GTK_NOTEBOOK(main_widgets.notebook), NULL, 0, NULL);*/
-			ui_set_window_title(NULL);
-			ui_save_buttons_toggle(FALSE);
-			ui_document_buttons_update();
-			build_menu_update(NULL);
-		}
-		return TRUE;
+	doc->is_valid = FALSE;
+	doc->file_name = NULL;
+	doc->real_path = NULL;
+	doc->file_type = NULL;
+	doc->encoding = NULL;
+	doc->has_bom = FALSE;
+	doc->tm_file = NULL;
+	document_undo_clear(doc);
+	if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) == 0)
+	{
+		treeviews_update_tag_list(NULL, FALSE);
+		/*on_notebook1_switch_page(GTK_NOTEBOOK(main_widgets.notebook), NULL, 0, NULL);*/
+		ui_set_window_title(NULL);
+		ui_save_buttons_toggle(FALSE);
+		ui_document_buttons_update();
+		build_menu_update(NULL);
 	}
-	geany_debug("Error: page_num: %d", page_num);
-	return FALSE;
+	return TRUE;
 }
 
 

Modified: branches/split-window-plugin/src/geanyobject.c
===================================================================
--- branches/split-window-plugin/src/geanyobject.c	2008-09-10 14:49:16 UTC (rev 2935)
+++ branches/split-window-plugin/src/geanyobject.c	2008-09-11 15:03:58 UTC (rev 2936)
@@ -116,6 +116,15 @@
 		gtk_marshal_NONE__POINTER,
 		G_TYPE_NONE, 1,
 		G_TYPE_POINTER);
+	geany_object_signals[GCB_DOCUMENT_CLOSE] = g_signal_new (
+		"document-close",
+		G_OBJECT_CLASS_TYPE (g_object_class),
+		G_SIGNAL_RUN_FIRST,
+		G_STRUCT_OFFSET (GeanyObjectClass, document_close),
+		NULL, NULL,
+		gtk_marshal_NONE__POINTER,
+		G_TYPE_NONE, 1,
+		G_TYPE_POINTER);
 
 	geany_object_signals[GCB_PROJECT_OPEN] = g_signal_new (
 		"project-open",
@@ -143,6 +152,7 @@
 		NULL, NULL,
 		gtk_marshal_NONE__NONE,
 		G_TYPE_NONE, 0);
+
 	geany_object_signals[GCB_UPDATE_EDITOR_MENU] = g_signal_new (
 		"update-editor-menu",
 		G_OBJECT_CLASS_TYPE (g_object_class),

Modified: branches/split-window-plugin/src/geanyobject.h
===================================================================
--- branches/split-window-plugin/src/geanyobject.h	2008-09-10 14:49:16 UTC (rev 2935)
+++ branches/split-window-plugin/src/geanyobject.h	2008-09-11 15:03:58 UTC (rev 2936)
@@ -38,6 +38,7 @@
 	GCB_DOCUMENT_OPEN,
 	GCB_DOCUMENT_SAVE,
 	GCB_DOCUMENT_ACTIVATE,
+	GCB_DOCUMENT_CLOSE,
 	GCB_PROJECT_OPEN,
 	GCB_PROJECT_SAVE,
 	GCB_PROJECT_CLOSE,
@@ -75,6 +76,7 @@
 	void (*document_open)(GeanyDocument *doc);
 	void (*document_save)(GeanyDocument *doc);
 	void (*document_activate)(GeanyDocument *doc);
+	void (*document_close)(GeanyDocument *doc);
 	void (*project_open)(GKeyFile *keyfile);
 	void (*project_save)(GKeyFile *keyfile);
 	void (*project_close)(void);


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