[gtksourceview/wip/search] search: callbacks on insert-text and delete-range



commit 29bfc2f7a2ab0f6c09dbb3d6300cbcf273643fa6
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Wed Jun 19 14:46:30 2013 +0200

    search: callbacks on insert-text and delete-range

 gtksourceview/gtksourcesearch.c |   73 ++++++++++++++++++++++++++++++++------
 1 files changed, 61 insertions(+), 12 deletions(-)
---
diff --git a/gtksourceview/gtksourcesearch.c b/gtksourceview/gtksourcesearch.c
index 0185df5..ad2e84f 100644
--- a/gtksourceview/gtksourcesearch.c
+++ b/gtksourceview/gtksourcesearch.c
@@ -137,30 +137,33 @@ clear_search (GtkSourceSearch *search)
 
 static void
 add_subregion (GtkSourceSearch *search,
-              GtkTextIter     *start,
-              GtkTextIter     *end)
+              GtkTextIter     *subregion_start,
+              GtkTextIter     *subregion_end)
 {
+       GtkTextIter start = *subregion_start;
+       GtkTextIter end = *subregion_end;
+
        if (search->priv->region == NULL)
        {
                return;
        }
 
-       if (!gtk_text_iter_starts_line (start))
+       if (!gtk_text_iter_starts_line (&start))
        {
-               gtk_text_iter_set_line_offset (start, 0);
+               gtk_text_iter_set_line_offset (&start, 0);
        }
 
-       if (!gtk_text_iter_ends_line (end))
+       if (!gtk_text_iter_ends_line (&end))
        {
-               gtk_text_iter_forward_to_line_end (end);
+               gtk_text_iter_forward_to_line_end (&end);
        }
 
-       gtk_text_region_add (search->priv->region, start, end);
+       gtk_text_region_add (search->priv->region, &start, &end);
 
-       gtk_text_iter_backward_lines (start, search->priv->text_nb_lines);
-       gtk_text_iter_forward_lines (end, search->priv->text_nb_lines);
+       gtk_text_iter_backward_lines (&start, search->priv->text_nb_lines);
+       gtk_text_iter_forward_lines (&end, search->priv->text_nb_lines);
 
-       g_signal_emit_by_name (search->priv->buffer, "highlight-updated", start, end);
+       g_signal_emit_by_name (search->priv->buffer, "highlight-updated", &start, &end);
 }
 
 static void
@@ -188,6 +191,53 @@ update (GtkSourceSearch *search)
 }
 
 static void
+insert_text_after_cb (GtkSourceSearch *search,
+                     GtkTextIter     *location,
+                     gchar           *text,
+                     gint             length)
+{
+       GtkTextIter start;
+       GtkTextIter end;
+
+       start = end = *location;
+
+       gtk_text_iter_backward_chars (&start,
+                                     g_utf8_strlen (text, length));
+
+       add_subregion (search, &start, &end);
+}
+
+static void
+delete_range_after_cb (GtkSourceSearch *search,
+                      GtkTextIter     *start,
+                      GtkTextIter     *end)
+{
+       add_subregion (search, start, end);
+}
+
+static void
+set_buffer (GtkSourceSearch *search,
+           GtkSourceBuffer *buffer)
+{
+       g_assert (search->priv->buffer == NULL);
+
+       search->priv->buffer = GTK_TEXT_BUFFER (buffer);
+       g_object_ref (buffer);
+
+       g_signal_connect_object (buffer,
+                                "insert-text",
+                                G_CALLBACK (insert_text_after_cb),
+                                search,
+                                G_CONNECT_AFTER | G_CONNECT_SWAPPED);
+
+       g_signal_connect_object (buffer,
+                                "delete-range",
+                                G_CALLBACK (delete_range_after_cb),
+                                search,
+                                G_CONNECT_AFTER | G_CONNECT_SWAPPED);
+}
+
+static void
 _gtk_source_search_dispose (GObject *object)
 {
        GtkSourceSearch *search = GTK_SOURCE_SEARCH (object);
@@ -238,8 +288,7 @@ _gtk_source_search_new (GtkSourceBuffer *buffer)
        g_return_val_if_fail (GTK_SOURCE_IS_BUFFER (buffer), NULL);
 
        search = g_object_new (GTK_SOURCE_TYPE_SEARCH, NULL);
-       search->priv->buffer = GTK_TEXT_BUFFER (buffer);
-       g_object_ref (buffer);
+       set_buffer (search, buffer);
 
        return search;
 }


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