[gnome-builder] sourceview: use movements as a jump source
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] sourceview: use movements as a jump source
- Date: Sun, 3 Sep 2017 20:31:25 +0000 (UTC)
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]