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 + + * 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 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;