[gtksourceview/wip/search] search: avoid flickering
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/search] search: avoid flickering
- Date: Thu, 20 Jun 2013 17:39:14 +0000 (UTC)
commit 3e2f19eb57a4c460d848d0365a400e0da87b167d
Author: Sébastien Wilmet <swilmet gnome org>
Date: Thu Jun 20 19:10:10 2013 +0200
search: avoid flickering
gtksourceview/gtksourcesearch.c | 64 +++++++++++++++++++--------------------
1 files changed, 31 insertions(+), 33 deletions(-)
---
diff --git a/gtksourceview/gtksourcesearch.c b/gtksourceview/gtksourcesearch.c
index 1b24ba0..3990929 100644
--- a/gtksourceview/gtksourcesearch.c
+++ b/gtksourceview/gtksourcesearch.c
@@ -200,9 +200,6 @@ get_first_subregion (GtkTextRegion *region,
static void
clear_search (GtkSourceSearch *search)
{
- GtkTextIter start;
- GtkTextIter end;
-
if (search->priv->region != NULL)
{
gtk_text_region_destroy (search->priv->region, TRUE);
@@ -221,13 +218,6 @@ clear_search (GtkSourceSearch *search)
search->priv->idle_scan_id = 0;
}
- gtk_text_buffer_get_bounds (search->priv->buffer, &start, &end);
-
- gtk_text_buffer_remove_tag (search->priv->buffer,
- search->priv->found_tag,
- &start,
- &end);
-
search->priv->occurrences_count = 0;
}
@@ -245,8 +235,6 @@ highlight_subregion (GtkSourceSearch *search,
text_tag_set_highest_priority (search->priv->found_tag,
search->priv->buffer);
- g_return_if_fail (search->priv->text_nb_lines > 0);
-
if (!gtk_text_iter_starts_line (start))
{
gtk_text_iter_set_line_offset (start, 0);
@@ -257,8 +245,8 @@ highlight_subregion (GtkSourceSearch *search,
gtk_text_iter_forward_to_line_end (end);
}
- gtk_text_iter_backward_lines (start, search->priv->text_nb_lines - 1);
- gtk_text_iter_forward_lines (end, search->priv->text_nb_lines - 1);
+ gtk_text_iter_backward_lines (start, MAX (0, search->priv->text_nb_lines - 1));
+ gtk_text_iter_forward_lines (end, MAX (0, search->priv->text_nb_lines - 1));
if (gtk_text_iter_has_tag (start, search->priv->found_tag) &&
!gtk_text_iter_ends_tag (start, search->priv->found_tag))
@@ -282,6 +270,17 @@ highlight_subregion (GtkSourceSearch *search,
start,
end);
+ if (search->priv->region != NULL)
+ {
+ gtk_text_region_subtract (search->priv->region, start, end);
+ }
+
+ if (search->priv->text == NULL)
+ {
+ /* We have removed the found_tag, we are done. */
+ return;
+ }
+
iter = *start;
if (gtk_text_iter_is_end (end))
@@ -316,15 +315,6 @@ highlight_subregion (GtkSourceSearch *search,
iter = match_end;
} while (found);
-
- if (search->priv->region != NULL)
- {
- gtk_text_region_subtract (search->priv->region, start, end);
- }
- else
- {
- g_warning ("search: region is NULL");
- }
}
static void
@@ -413,6 +403,7 @@ idle_scan_cb (GtkSourceSearch *search)
if (is_text_region_empty (search->priv->region))
{
finished = TRUE;
+ search->priv->idle_scan_id = 0;
if (search->priv->region != NULL)
{
@@ -441,7 +432,7 @@ add_subregion_to_scan (GtkSourceSearch *search,
GtkTextIter start = *subregion_start;
GtkTextIter end = *subregion_end;
- if (is_text_region_empty (search->priv->region))
+ if (search->priv->region == NULL)
{
return;
}
@@ -482,17 +473,16 @@ update (GtkSourceSearch *search)
clear_search (search);
+ gtk_text_buffer_get_bounds (search->priv->buffer, &start, &end);
+
if (search->priv->text == NULL)
{
+ g_signal_emit_by_name (search->priv->buffer, "highlight-updated", &start, &end);
return;
}
search->priv->region = gtk_text_region_new (search->priv->buffer);
-
- gtk_text_buffer_get_bounds (search->priv->buffer, &start, &end);
add_subregion_to_scan (search, &start, &end);
-
- install_idle_scan (search);
}
static void
@@ -692,15 +682,22 @@ _gtk_source_search_update_highlight (GtkSourceSearch *search,
g_return_if_fail (start != NULL);
g_return_if_fail (end != NULL);
- if (dispose_has_run (search) ||
- is_text_region_empty (search->priv->region))
+ if (dispose_has_run (search))
{
return;
}
- region_to_highlight = gtk_text_region_intersect (search->priv->region,
- start,
- end);
+ if (is_text_region_empty (search->priv->region))
+ {
+ region_to_highlight = gtk_text_region_new (search->priv->buffer);
+ gtk_text_region_add (region_to_highlight, start, end);
+ }
+ else
+ {
+ region_to_highlight = gtk_text_region_intersect (search->priv->region,
+ start,
+ end);
+ }
if (region_to_highlight == NULL)
{
@@ -725,6 +722,7 @@ _gtk_source_search_update_highlight (GtkSourceSearch *search,
}
search->priv->high_priority_region = region_to_highlight;
+ install_idle_scan (search);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]