[gedit/wip/browser-menu] filebrowser: clear signal in dispose to avoid assertion



commit 6a9750a9dee60d041ec895ee818f4403ef905707
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Sat Apr 20 15:29:38 2013 +0200

    filebrowser: clear signal in dispose to avoid assertion

 plugins/filebrowser/gedit-file-browser-widget.c | 38 +++++++++++++------------
 1 file changed, 20 insertions(+), 18 deletions(-)
---
diff --git a/plugins/filebrowser/gedit-file-browser-widget.c b/plugins/filebrowser/gedit-file-browser-widget.c
index 5be02fc..a26b0b3 100644
--- a/plugins/filebrowser/gedit-file-browser-widget.c
+++ b/plugins/filebrowser/gedit-file-browser-widget.c
@@ -345,11 +345,31 @@ gedit_file_browser_widget_finalize (GObject *object)
 }
 
 static void
+clear_signals (GeditFileBrowserWidget *obj)
+{
+       GSList *item;
+       SignalNode *node;
+
+       item = obj->priv->signal_pool;
+       while (item != NULL)
+       {
+               node = (SignalNode *) (item->data);
+               item = g_slist_delete_link (item, item);
+
+               g_signal_handler_disconnect (node->object, node->id);
+               g_slice_free (SignalNode, node);
+       }
+
+       obj->priv->signal_pool = NULL;
+}
+
+static void
 gedit_file_browser_widget_dispose (GObject *object)
 {
        GeditFileBrowserWidget *obj = GEDIT_FILE_BROWSER_WIDGET (object);
        GeditFileBrowserWidgetPrivate *priv = obj->priv;
 
+       clear_signals (obj);
        g_clear_object (&priv->file_store);
        g_clear_object (&priv->bookmarks_store);
 
@@ -537,24 +557,6 @@ add_signal (GeditFileBrowserWidget *obj,
            g_slist_prepend (obj->priv->signal_pool, node);
 }
 
-static void
-clear_signals (GeditFileBrowserWidget *obj)
-{
-       GSList *item;
-       SignalNode *node;
-
-       for (item = obj->priv->signal_pool; item; item = item->next)
-       {
-               node = (SignalNode *) (item->data);
-
-               g_signal_handler_disconnect (node->object, node->id);
-               g_slice_free (SignalNode, node);
-       }
-
-       g_slist_free (obj->priv->signal_pool);
-       obj->priv->signal_pool = NULL;
-}
-
 static gboolean
 separator_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]