[gtksourceview/wip/fix-search] SearchContext: clear search when buffer destroyed (!doesn't work)



commit 34b22353d3d2cf27dadcaff69c41964f65686bbe
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Thu Mar 5 11:55:36 2015 +0100

    SearchContext: clear search when buffer destroyed (!doesn't work)
    
    So the idle scan function is removed.

 gtksourceview/gtksourcesearchcontext.c |   18 ++++++++++++++----
 1 files changed, 14 insertions(+), 4 deletions(-)
---
diff --git a/gtksourceview/gtksourcesearchcontext.c b/gtksourceview/gtksourcesearchcontext.c
index 5b92558..4273315 100644
--- a/gtksourceview/gtksourcesearchcontext.c
+++ b/gtksourceview/gtksourcesearchcontext.c
@@ -2528,6 +2528,14 @@ delete_range_after_cb (GtkSourceSearchContext *search,
 }
 
 static void
+buffer_destroyed_cb (GtkSourceSearchContext *search,
+                    GObject                *where_the_object_was)
+{
+       search->priv->buffer = NULL;
+       clear_search (search);
+}
+
+static void
 set_buffer (GtkSourceSearchContext *search,
            GtkSourceBuffer        *buffer)
 {
@@ -2536,8 +2544,9 @@ set_buffer (GtkSourceSearchContext *search,
 
        search->priv->buffer = GTK_TEXT_BUFFER (buffer);
 
-       g_object_add_weak_pointer (G_OBJECT (buffer),
-                                  (gpointer *)&search->priv->buffer);
+       g_object_weak_ref (G_OBJECT (buffer),
+                          (GWeakNotify) buffer_destroyed_cb,
+                          search);
 
        search->priv->tag_table = gtk_text_buffer_get_tag_table (search->priv->buffer);
        g_object_ref (search->priv->tag_table);
@@ -2664,8 +2673,9 @@ gtk_source_search_context_dispose (GObject *object)
 
        if (search->priv->buffer != NULL)
        {
-               g_object_remove_weak_pointer (G_OBJECT (search->priv->buffer),
-                                             (gpointer *)&search->priv->buffer);
+               g_object_weak_unref (G_OBJECT (search->priv->buffer),
+                                    (GWeakNotify) buffer_destroyed_cb,
+                                    search);
 
                search->priv->buffer = NULL;
        }


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