All pastes #35728 Raw Edit

Untitled

public text v1 · immutable
#35728 ·published 2006-01-04 16:48 UTC
rendered paste body
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gedit/ChangeLog,v
retrieving revision 1.591
diff -u -p -r1.591 ChangeLog
--- ChangeLog	3 Jan 2006 17:19:09 -0000	1.591
+++ ChangeLog	4 Jan 2006 16:43:36 -0000
@@ -1,3 +1,12 @@
+2006-01-03  Jesse van den Kieboom  <jesse@icecrew.nl>
+
+	* gedit/gedit-plugins-engine.[ch]:
+	(gedit_plugins_engine_garbage_collect): new function, ensures garbage
+	collection for plugins
+	
+	* gedit/gedit-window.c: add garbage collection on destroy
+	and tab_removed
+	
 2006-01-03  Paolo Maggi  <paolo@gnome.org>
 
 	Fixes drag&drop of files from file-roller
Index: gedit/gedit-plugins-engine.c
===================================================================
RCS file: /cvs/gnome/gedit/gedit/gedit-plugins-engine.c,v
retrieving revision 1.26
diff -u -p -r1.26 gedit-plugins-engine.c
--- gedit/gedit-plugins-engine.c	12 Dec 2005 17:27:55 -0000	1.26
+++ gedit/gedit-plugins-engine.c	4 Jan 2006 16:43:38 -0000
@@ -341,6 +341,23 @@ gedit_plugins_engine_init (void)
 	return TRUE;
 }
 
+static gboolean
+run_gc (gpointer data)
+{
+#ifdef ENABLE_PYTHON
+	while (PyGC_Collect ())
+		;	
+#endif
+
+	return FALSE;
+}
+
+void
+gedit_plugins_engine_garbage_collect (void)
+{
+	g_idle_add (run_gc, NULL);
+}
+
 void
 gedit_plugins_engine_shutdown (void)
 {
@@ -385,6 +402,9 @@ gedit_plugins_engine_shutdown (void)
 
 	g_object_unref (gedit_plugins_engine_gconf_client);
 	gedit_plugins_engine_gconf_client = NULL;
+
+	/* try our best to make plugins drop refs */
+	run_gc (NULL);
 }
 
 const GList *
Index: gedit/gedit-plugins-engine.h
===================================================================
RCS file: /cvs/gnome/gedit/gedit/gedit-plugins-engine.h,v
retrieving revision 1.9
diff -u -p -r1.9 gedit-plugins-engine.h
--- gedit/gedit-plugins-engine.h	12 Dec 2005 17:27:55 -0000	1.9
+++ gedit/gedit-plugins-engine.h	4 Jan 2006 16:43:38 -0000
@@ -39,6 +39,8 @@ typedef struct _GeditPluginInfo GeditPlu
 gboolean	 gedit_plugins_engine_init 		(void);
 void		 gedit_plugins_engine_shutdown 		(void);
 
+void		 gedit_plugins_engine_garbage_collect	(void);
+
 const GList	*gedit_plugins_engine_get_plugins_list 	(void);
 
 gboolean 	 gedit_plugins_engine_activate_plugin 	(GeditPluginInfo *info);
Index: gedit/gedit-window.c
===================================================================
RCS file: /cvs/gnome/gedit/gedit/gedit-window.c,v
retrieving revision 1.10
diff -u -p -r1.10 gedit-window.c
--- gedit/gedit-window.c	3 Jan 2006 17:19:10 -0000	1.10
+++ gedit/gedit-window.c	4 Jan 2006 16:43:43 -0000
@@ -165,6 +165,8 @@ gedit_window_destroy (GtkObject *object)
 		g_object_unref (window->priv->recent_view_uim);
 		window->priv->recent_view_uim = NULL;
 	}
+	
+	gedit_plugins_engine_garbage_collect();
 
 	GTK_OBJECT_CLASS (gedit_window_parent_class)->destroy (object);
 }
@@ -234,11 +236,20 @@ gedit_window_key_press_event (GtkWidget 
 }
 
 static void
+gedit_window_tab_removed (GeditWindow         *window,
+			      GeditTab *tab) 
+{
+	gedit_plugins_engine_garbage_collect();
+}
+
+static void
 gedit_window_class_init (GeditWindowClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	GtkObjectClass *gobject_class = GTK_OBJECT_CLASS (klass);
 	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+	klass->tab_removed = gedit_window_tab_removed;
 
 	object_class->finalize = gedit_window_finalize;
 	object_class->get_property = gedit_window_get_property;