[gtksourceview/wip/search] search: callbacks on insert-text and delete-range
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/search] search: callbacks on insert-text and delete-range
- Date: Wed, 19 Jun 2013 13:02:59 +0000 (UTC)
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]