[gtksourceview/wip/custom-word-boundaries-2: 4/5] view: override word boundaries for GtkTextView::move-cursor



commit f40c714747cc3f9a4874d5a922c411890446a36e
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sun Dec 21 15:20:37 2014 +0100

    view: override word boundaries for GtkTextView::move-cursor

 gtksourceview/gtksourceview.c |   50 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 46 insertions(+), 4 deletions(-)
---
diff --git a/gtksourceview/gtksourceview.c b/gtksourceview/gtksourceview.c
index 58d931a..2717ece 100644
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -1379,15 +1379,18 @@ move_cursor (GtkTextView       *text_view,
             gboolean           extend_selection)
 {
        GtkTextBuffer *buffer = gtk_text_view_get_buffer (text_view);
+       GtkTextMark *insert = gtk_text_buffer_get_insert (buffer);
 
        if (extend_selection)
-               gtk_text_buffer_move_mark_by_name (buffer, "insert",
-                                                  new_location);
+       {
+               gtk_text_buffer_move_mark (buffer, insert, new_location);
+       }
        else
+       {
                gtk_text_buffer_place_cursor (buffer, new_location);
+       }
 
-       gtk_text_view_scroll_mark_onscreen (text_view,
-                                           gtk_text_buffer_get_insert (buffer));
+       gtk_text_view_scroll_mark_onscreen (text_view, insert);
 }
 
 static void
@@ -1634,6 +1637,41 @@ move_cursor_smart_home_end (GtkTextView     *text_view,
 }
 
 static void
+move_cursor_words (GtkTextView *text_view,
+                  gint         count,
+                  gboolean     extend_selection)
+{
+       GtkTextBuffer *buffer;
+       GtkTextIter insert;
+       GtkTextIter newplace;
+
+       buffer = gtk_text_view_get_buffer (text_view);
+
+       gtk_text_buffer_get_iter_at_mark (buffer,
+                                         &insert,
+                                         gtk_text_buffer_get_insert (buffer));
+
+       newplace = insert;
+
+       if (count < 0)
+       {
+               if (!_gtk_source_iter_backward_visible_word_starts (&newplace, -count))
+               {
+                       gtk_text_iter_set_line_offset (&newplace, 0);
+               }
+       }
+       else if (count > 0)
+       {
+               if (!_gtk_source_iter_forward_visible_word_ends (&newplace, count))
+               {
+                       gtk_text_iter_forward_to_line_end (&newplace);
+               }
+       }
+
+       move_cursor (text_view, &newplace, extend_selection);
+}
+
+static void
 gtk_source_view_move_cursor (GtkTextView    *text_view,
                             GtkMovementStep step,
                             gint            count,
@@ -1649,6 +1687,10 @@ gtk_source_view_move_cursor (GtkTextView    *text_view,
                        }
                        break;
 
+               case GTK_MOVEMENT_WORDS:
+                       move_cursor_words (text_view, count, extend_selection);
+                       return;
+
                default:
                        break;
        }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]