textview: scroll insert onscreen after undo/redo
authorChristian Hergert <chergert@redhat.com>
Sun, 26 Dec 2021 20:56:42 +0000 (12:56 -0800)
committerChristian Hergert <chergert@redhat.com>
Sun, 26 Dec 2021 20:56:42 +0000 (12:56 -0800)
After performing an action such as undo/redo, we need to actually scroll
to the position where the operation occurred.

I do note that the scroll here seems to often get invalidated if it is
pages away, and we never make the full scroll. But I've seen this all over
the place elsewhere too and that needs to be handled, most likely, as a
more comprehensive fix for scrolling during line validation.

Related #4575

gtk/gtktextview.c

index f8e1f0d1edb5facc366cb5fc2782864a9fdcbeb4..00b361f8a2f0a0801f21126d7fd876e7cb481be1 100644 (file)
@@ -10101,7 +10101,11 @@ gtk_text_view_real_undo (GtkWidget   *widget,
   GtkTextView *text_view = GTK_TEXT_VIEW (widget);
 
   if (gtk_text_view_get_editable (text_view))
-    gtk_text_buffer_undo (text_view->priv->buffer);
+    {
+      gtk_text_buffer_undo (text_view->priv->buffer);
+      gtk_text_view_scroll_mark_onscreen (text_view,
+                                          gtk_text_buffer_get_insert (text_view->priv->buffer));
+    }
 }
 
 static void
@@ -10112,7 +10116,11 @@ gtk_text_view_real_redo (GtkWidget   *widget,
   GtkTextView *text_view = GTK_TEXT_VIEW (widget);
 
   if (gtk_text_view_get_editable (text_view))
-    gtk_text_buffer_redo (text_view->priv->buffer);
+    {
+      gtk_text_buffer_redo (text_view->priv->buffer);
+      gtk_text_view_scroll_mark_onscreen (text_view,
+                                          gtk_text_buffer_get_insert (text_view->priv->buffer));
+    }
 }
 
 static void