[gnome-builder] sourceview: use movements as a jump source



commit 8a62a2d1cba1262c65ce847f5a02bc9529e161cb
Author: Christian Hergert <chergert redhat com>
Date:   Sun Sep 3 13:30:36 2017 -0700

    sourceview: use movements as a jump source
    
    This can be useful for history tracking when the insert cursor has moved
    more than JUMP_THRESHOLD lines.

 libide/sourceview/ide-source-view-movements.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/libide/sourceview/ide-source-view-movements.c b/libide/sourceview/ide-source-view-movements.c
index 47c0c5e..4d5a056 100644
--- a/libide/sourceview/ide-source-view-movements.c
+++ b/libide/sourceview/ide-source-view-movements.c
@@ -29,8 +29,9 @@
 #include "sourceview/ide-source-view-movements.h"
 #include "sourceview/ide-text-iter.h"
 
-#define ANCHOR_BEGIN "SELECTION_ANCHOR_BEGIN"
-#define ANCHOR_END   "SELECTION_ANCHOR_END"
+#define ANCHOR_BEGIN   "SELECTION_ANCHOR_BEGIN"
+#define ANCHOR_END     "SELECTION_ANCHOR_END"
+#define JUMP_THRESHOLD 20
 
 #define TRACE_ITER(iter) \
   IDE_TRACE_MSG("%d:%d", gtk_text_iter_get_line(iter), \
@@ -1942,8 +1943,11 @@ _ide_source_view_apply_movement (IdeSourceView         *self,
   GtkTextBuffer *buffer;
   GtkTextMark *insert;
   GtkTextIter end_iter;
+  GtkTextIter before_insert;
+  GtkTextIter after_insert;
   gint min_count = 1;
   gint end_line;
+  gint distance;
   gsize i;
   guint line;
 
@@ -1968,6 +1972,8 @@ _ide_source_view_apply_movement (IdeSourceView         *self,
   buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self));
   insert = gtk_text_buffer_get_insert (buffer);
 
+  gtk_text_buffer_get_iter_at_mark (buffer, &before_insert, insert);
+
   /* specific processing for underscore motion */
   if (g_str_has_suffix (command_str->str, "_"))
     {
@@ -2275,6 +2281,13 @@ _ide_source_view_apply_movement (IdeSourceView         *self,
 
   if (!mv.ignore_scroll_to_insert)
     ide_source_view_scroll_mark_onscreen (self, insert, TRUE, 0.5, 0.5);
+
+  /* Emit a jump if we moved more than JUMP_THRESHOLD lines */
+  gtk_text_buffer_get_iter_at_mark (buffer, &after_insert, insert);
+  distance = gtk_text_iter_get_line (&before_insert) -
+             gtk_text_iter_get_line (&after_insert);
+  if (ABS (distance) > JUMP_THRESHOLD)
+    ide_source_view_jump (self, &after_insert);
 }
 
 void


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