[gnome-builder] libide: track cursor offset when mode changes



commit dc69dc937ae9dcae03936be3fb4d47345c792e95
Author: Christian Hergert <christian hergert me>
Date:   Wed Mar 11 22:49:39 2015 -0700

    libide: track cursor offset when mode changes
    
    This helps catch things more often, so that movements keep us on the
    right position.

 libide/ide-source-view.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/libide/ide-source-view.c b/libide/ide-source-view.c
index 41c7e71..185fbe0 100644
--- a/libide/ide-source-view.c
+++ b/libide/ide-source-view.c
@@ -2524,6 +2524,23 @@ ide_source_view_real_selection_theatric (IdeSourceView         *self,
 }
 
 static void
+ide_source_view_save_offset (IdeSourceView *self)
+{
+  IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
+  GtkTextView *text_view = (GtkTextView *)self;
+  GtkTextBuffer *buffer;
+  GtkTextMark *insert;
+  GtkTextIter iter;
+
+  g_assert (IDE_IS_SOURCE_VIEW (self));
+
+  buffer = gtk_text_view_get_buffer (text_view);
+  insert = gtk_text_buffer_get_insert (buffer);
+  gtk_text_buffer_get_iter_at_mark (buffer, &iter, insert);
+  priv->target_line_offset = gtk_text_iter_get_line_offset (&iter);
+}
+
+static void
 ide_source_view_real_set_mode (IdeSourceView         *self,
                                const gchar           *mode,
                                IdeSourceViewModeType  type)
@@ -2546,6 +2563,8 @@ ide_source_view_real_set_mode (IdeSourceView         *self,
   }
 #endif
 
+  ide_source_view_save_offset (self);
+
   if (priv->mode)
     {
       IdeSourceViewMode *old_mode = g_object_ref (priv->mode);


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