summaryrefslogtreecommitdiff
path: root/gtk/gtktextiter.c
diff options
context:
space:
mode:
authorSébastien Wilmet <swilmet@gnome.org>2014-07-13 22:20:25 +0200
committerSébastien Wilmet <swilmet@gnome.org>2014-07-17 12:56:56 +0200
commit5d666344820bc23330f128109c011848ec744736 (patch)
treefb7aec706745daaddd6450cf621c9f7f4031f862 /gtk/gtktextiter.c
parent79c835a151a054c3d12782a15951159fc860c465 (diff)
downloadgtk+-5d666344820bc23330f128109c011848ec744736.tar.gz
textiter: fix bug in find_by_log_attrs()
Do not work with the iter passed as the function argument. Work with another iter, and set it back to the function argument only if something has been found. This fixes a few unit tests. But there are regressions for a few others. https://bugzilla.gnome.org/show_bug.cgi?id=618852
Diffstat (limited to 'gtk/gtktextiter.c')
-rw-r--r--gtk/gtktextiter.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/gtk/gtktextiter.c b/gtk/gtktextiter.c
index f445240e09..8d9a140a38 100644
--- a/gtk/gtktextiter.c
+++ b/gtk/gtktextiter.c
@@ -3097,54 +3097,55 @@ find_line_log_attrs (const GtkTextIter *iter,
}
static gboolean
-find_by_log_attrs (GtkTextIter *iter,
+find_by_log_attrs (GtkTextIter *arg_iter,
FindLogAttrFunc func,
gboolean forward)
{
- GtkTextIter orig;
+ GtkTextIter iter;
gboolean already_moved_initially = FALSE;
- g_return_val_if_fail (iter != NULL, FALSE);
+ g_return_val_if_fail (arg_iter != NULL, FALSE);
- orig = *iter;
+ iter = *arg_iter;
while (TRUE)
{
gint offset = 0;
gboolean found;
- found = find_line_log_attrs (iter, func, &offset, already_moved_initially);
+ found = find_line_log_attrs (&iter, func, &offset, already_moved_initially);
if (found)
{
- gtk_text_iter_set_line_offset (iter, offset);
+ gboolean moved;
+
+ gtk_text_iter_set_line_offset (&iter, offset);
+
+ moved = !gtk_text_iter_equal (&iter, arg_iter);
- return !gtk_text_iter_equal (iter, &orig) && !gtk_text_iter_is_end (iter);
+ *arg_iter = iter;
+ return moved && !gtk_text_iter_is_end (arg_iter);
}
if (forward)
{
- if (!gtk_text_iter_forward_line (iter))
+ if (!gtk_text_iter_forward_line (&iter))
return FALSE;
already_moved_initially = TRUE;
}
else
{
- GtkTextIter tmp_iter = *iter;
-
/* Go to end of previous line. First go to the current line offset 0,
* because backward_line() snaps to start of line 0 if iter is already
* on line 0.
*/
- gtk_text_iter_set_line_offset (&tmp_iter, 0);
+ gtk_text_iter_set_line_offset (&iter, 0);
- if (gtk_text_iter_backward_line (&tmp_iter))
+ if (gtk_text_iter_backward_line (&iter))
{
- *iter = tmp_iter;
-
- if (!gtk_text_iter_ends_line (iter))
- gtk_text_iter_forward_to_line_end (iter);
+ if (!gtk_text_iter_ends_line (&iter))
+ gtk_text_iter_forward_to_line_end (&iter);
already_moved_initially = TRUE;
}