[gtksourceview/wip/search] search: fix adjust_subregion()
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/search] search: fix adjust_subregion()
- Date: Sat, 22 Jun 2013 13:28:21 +0000 (UTC)
commit b36b717e3361a493a904a6298fa3aebe075cbc03
Author: Sébastien Wilmet <swilmet gnome org>
Date: Sat Jun 22 15:24:45 2013 +0200
search: fix adjust_subregion()
gtksourceview/gtksourcesearch.c | 131 ++++++++++++++++++++-------------------
1 files changed, 68 insertions(+), 63 deletions(-)
---
diff --git a/gtksourceview/gtksourcesearch.c b/gtksourceview/gtksourcesearch.c
index 210cea6..398404a 100644
--- a/gtksourceview/gtksourcesearch.c
+++ b/gtksourceview/gtksourcesearch.c
@@ -305,9 +305,6 @@ adjust_subregion (GtkSourceSearch *search,
GtkTextIter *start,
GtkTextIter *end)
{
- GtkTextIter initial_start = *start;
- GtkTextIter initial_end = *end;
-
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));
@@ -329,83 +326,91 @@ adjust_subregion (GtkSourceSearch *search,
* not.
*/
- if (gtk_text_iter_has_tag (start, search->priv->found_tag))
+ if (gtk_text_iter_has_tag (start, search->priv->found_tag) &&
+ !is_text_region_empty (search->priv->region_to_scan))
{
- if (search->priv->region_to_scan != NULL)
- {
- GtkTextRegion *region = gtk_text_region_intersect (search->priv->region_to_scan,
- start,
- &initial_start);
+ GtkTextIter tag_start = *start;
+ GtkTextIter tag_end = *start;
+ GtkTextRegion *region;
- if (is_text_region_empty (region) &&
- !gtk_text_iter_ends_tag (start, search->priv->found_tag))
- {
- /* 'region' has already been scanned, so 'start'
- * is in a correct match, we can skip it.
- */
- gtk_text_iter_forward_to_tag_toggle (start, search->priv->found_tag);
- }
- else if (!gtk_text_iter_begins_tag (start, search->priv->found_tag))
- {
- /* 'region' has not already been scanned, so
- * 'start' is most probably in an old match that
- * must be removed.
- */
- gtk_text_iter_backward_to_tag_toggle (start, search->priv->found_tag);
- }
+ if (!gtk_text_iter_begins_tag (&tag_start, search->priv->found_tag))
+ {
+ gtk_text_iter_backward_to_tag_toggle (&tag_start, search->priv->found_tag);
+ }
- if (region != NULL)
- {
- gtk_text_region_destroy (region, TRUE);
- }
+ if (!gtk_text_iter_ends_tag (&tag_end, search->priv->found_tag))
+ {
+ gtk_text_iter_forward_to_tag_toggle (&tag_end, search->priv->found_tag);
}
- else if (!gtk_text_iter_ends_tag (start, search->priv->found_tag))
+
+ region = gtk_text_region_intersect (search->priv->region_to_scan,
+ &tag_start,
+ &tag_end);
+
+ if (is_text_region_empty (region))
{
- /* All the buffer has been scanned, so 'start' is in a
+ /* 'region' has already been scanned, so 'start' is in a
* correct match, we can skip it.
*/
- gtk_text_iter_forward_to_tag_toggle (start, search->priv->found_tag);
+ *start = tag_end;
+ }
+ else
+ {
+ /* 'region' has not already been scanned completely, so
+ * 'start' is most probably in an old match that must be
+ * removed.
+ */
+ *start = tag_start;
+ }
+
+ if (region != NULL)
+ {
+ gtk_text_region_destroy (region, TRUE);
}
}
/* Symmetric for 'end'. */
- if (gtk_text_iter_has_tag (end, search->priv->found_tag))
+ if (gtk_text_iter_has_tag (end, search->priv->found_tag) &&
+ !is_text_region_empty (search->priv->region_to_scan))
{
- if (search->priv->region_to_scan != NULL)
- {
- GtkTextRegion *region = gtk_text_region_intersect (search->priv->region_to_scan,
- &initial_end,
- end);
+ GtkTextIter tag_start = *end;
+ GtkTextIter tag_end = *end;
+ GtkTextRegion *region;
- if (is_text_region_empty (region) &&
- !gtk_text_iter_begins_tag (end, search->priv->found_tag))
- {
- /* 'region' has already been scanned, so 'end'
- * is in a correct match, we can skip it.
- */
- gtk_text_iter_backward_to_tag_toggle (end, search->priv->found_tag);
- }
- else if (!gtk_text_iter_ends_tag (end, search->priv->found_tag))
- {
- /* 'region' has not already been scanned, so
- * 'end' is most probably in an old match that
- * must be removed.
- */
- gtk_text_iter_forward_to_tag_toggle (end, search->priv->found_tag);
- }
+ if (!gtk_text_iter_begins_tag (&tag_start, search->priv->found_tag))
+ {
+ gtk_text_iter_backward_to_tag_toggle (&tag_start, search->priv->found_tag);
+ }
- if (region != NULL)
- {
- gtk_text_region_destroy (region, TRUE);
- }
+ if (!gtk_text_iter_ends_tag (&tag_end, search->priv->found_tag))
+ {
+ gtk_text_iter_forward_to_tag_toggle (&tag_end, search->priv->found_tag);
}
- else if (!gtk_text_iter_begins_tag (end, search->priv->found_tag))
+
+ region = gtk_text_region_intersect (search->priv->region_to_scan,
+ &tag_start,
+ &tag_end);
+
+ if (is_text_region_empty (region))
{
- /* All the buffer has been scanned, so 'end' is in a
+ /* 'region' has already been scanned, so 'end' is in a
* correct match, we can skip it.
*/
- gtk_text_iter_backward_to_tag_toggle (start, search->priv->found_tag);
+ *end = tag_start;
+ }
+ else
+ {
+ /* 'region' has not already been scanned completely, so
+ * 'end' is most probably in an old match that must be
+ * removed.
+ */
+ *end = tag_end;
+ }
+
+ if (region != NULL)
+ {
+ gtk_text_region_destroy (region, TRUE);
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]