[gtksourceview] sourceiter: check movements before continuing
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview] sourceiter: check movements before continuing
- Date: Tue, 17 Sep 2019 03:59:07 +0000 (UTC)
commit 1af4ba9a9e3918c095e4446018c6f92afe82a88c
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 afe94ba0..538f209f 100644
--- a/gtksourceview/gtksourceiter.c
+++ b/gtksourceview/gtksourceiter.c
@@ -68,14 +68,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)
@@ -97,7 +104,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)))
{
@@ -110,7 +121,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)))
{
@@ -197,11 +212,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
{
@@ -243,7 +264,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) == '_')
{
@@ -251,7 +276,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]