[gtksourceview/gnome-3-24] sourceiter: check movements before continuing
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/gnome-3-24] sourceiter: check movements before continuing
- Date: Tue, 17 Sep 2019 04:00:07 +0000 (UTC)
commit 8aab2b655fc99e2b1e808c1b7c67f0e6328b323d
Author: Christian Hergert <chergert redhat com>
Date: Mon Sep 16 20:58:46 2019 -0700
sourceiter: check movements before continuing
When moving through the buffer, we can have a situation where the edges
of the buffer are invisible, and therefore _is_start() will return FALSE
but the movement we performed did nothing (and left us at the visual
position of 0:0 or -1:-1).
This fixes that situation by checking the return value of those
movements and bailing as we would otherwise.
Fixes #76
gtksourceview/gtksourceiter.c | 44 +++++++++++++++++++++++++++++++++++--------
1 file changed, 36 insertions(+), 8 deletions(-)
---
diff --git a/gtksourceview/gtksourceiter.c b/gtksourceview/gtksourceiter.c
index 208fd543..978683d7 100644
--- a/gtksourceview/gtksourceiter.c
+++ b/gtksourceview/gtksourceiter.c
@@ -59,14 +59,21 @@ _gtk_source_iter_forward_full_word_end (GtkTextIter *iter)
while (g_unichar_isspace (gtk_text_iter_get_char (&pos)))
{
- gtk_text_iter_forward_visible_cursor_position (&pos);
+ if (!gtk_text_iter_forward_visible_cursor_position (&pos))
+ {
+ break;
+ }
}
while (!gtk_text_iter_is_end (&pos) &&
!g_unichar_isspace (gtk_text_iter_get_char (&pos)))
{
non_blank_found = TRUE;
- gtk_text_iter_forward_visible_cursor_position (&pos);
+
+ if (!gtk_text_iter_forward_visible_cursor_position (&pos))
+ {
+ break;
+ }
}
if (non_blank_found)
@@ -88,7 +95,11 @@ _gtk_source_iter_backward_full_word_start (GtkTextIter *iter)
while (!gtk_text_iter_is_start (&pos))
{
prev = pos;
- gtk_text_iter_backward_visible_cursor_position (&prev);
+
+ if (!gtk_text_iter_backward_visible_cursor_position (&prev))
+ {
+ break;
+ }
if (!g_unichar_isspace (gtk_text_iter_get_char (&prev)))
{
@@ -101,7 +112,11 @@ _gtk_source_iter_backward_full_word_start (GtkTextIter *iter)
while (!gtk_text_iter_is_start (&pos))
{
prev = pos;
- gtk_text_iter_backward_visible_cursor_position (&prev);
+
+ if (!gtk_text_iter_backward_visible_cursor_position (&prev))
+ {
+ break;
+ }
if (g_unichar_isspace (gtk_text_iter_get_char (&prev)))
{
@@ -188,11 +203,17 @@ _gtk_source_iter_forward_extra_natural_word_end (GtkTextIter *iter)
{
if (gtk_text_iter_get_char (iter) == '_')
{
- gtk_text_iter_forward_visible_cursor_position (iter);
+ if (!gtk_text_iter_forward_visible_cursor_position (iter))
+ {
+ break;
+ }
}
else if (gtk_text_iter_starts_word (iter))
{
- gtk_text_iter_forward_visible_word_end (iter);
+ if (!gtk_text_iter_forward_visible_word_end (iter))
+ {
+ break;
+ }
}
else
{
@@ -234,7 +255,11 @@ _gtk_source_iter_backward_extra_natural_word_start (GtkTextIter *iter)
while (!gtk_text_iter_is_start (iter))
{
GtkTextIter prev = *iter;
- gtk_text_iter_backward_visible_cursor_position (&prev);
+
+ if (!gtk_text_iter_backward_visible_cursor_position (&prev))
+ {
+ break;
+ }
if (gtk_text_iter_get_char (&prev) == '_')
{
@@ -242,7 +267,10 @@ _gtk_source_iter_backward_extra_natural_word_start (GtkTextIter *iter)
}
else if (gtk_text_iter_ends_word (iter))
{
- gtk_text_iter_backward_visible_word_start (iter);
+ if (!gtk_text_iter_backward_visible_word_start (iter))
+ {
+ break;
+ }
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]