[gtksourceview/wip/misc-improvements: 2/2] view: disconnect notify::buffer in dispose()



commit e0b4460d793a5913d5e5ee0bddcde9f69dac846c
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sun Jul 6 17:58:33 2014 +0200

    view: disconnect notify::buffer in dispose()

 gtksourceview/gtksourceview.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/gtksourceview/gtksourceview.c b/gtksourceview/gtksourceview.c
index 64fb899..90e3c2b 100644
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -926,10 +926,9 @@ gtk_source_view_get_property (GObject    *object,
 }
 
 static void
-notify_buffer (GtkSourceView *view)
+notify_buffer_cb (GtkSourceView *view)
 {
-       set_source_buffer (view,
-               gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
+       set_source_buffer (view, gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
 }
 
 static void
@@ -973,7 +972,7 @@ gtk_source_view_init (GtkSourceView *view)
 
        g_signal_connect (view,
                          "notify::buffer",
-                         G_CALLBACK (notify_buffer),
+                         G_CALLBACK (notify_buffer_cb),
                          NULL);
 }
 
@@ -988,6 +987,14 @@ gtk_source_view_dispose (GObject *object)
 
        remove_source_buffer (view);
 
+       /* Disconnect notify buffer because the destroy of the textview will set
+        * the buffer to NULL, and we call get_buffer in the notify which would
+        * reinstate a buffer which we don't want.
+        * There is no problem calling g_signal_handlers_disconnect_by_func()
+        * several times (if dispose() is called several times).
+        */
+       g_signal_handlers_disconnect_by_func (view, notify_buffer_cb, NULL);
+
        G_OBJECT_CLASS (gtk_source_view_parent_class)->dispose (object);
 }
 


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