rendered paste bodyIndex: 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;