text: Make overwrite undo-friendly
authorMatthias Clasen <mclasen@redhat.com>
Wed, 19 Oct 2022 03:37:03 +0000 (23:37 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 19 Oct 2022 03:49:16 +0000 (23:49 -0400)
In overwrite mode, every typed character gets
handled as a delete+insert, but we should not
record these as two individually undoable
steps.

This matches how we handle overwrite mode in
GtkTextView.

Fixes: #4411
gtk/gtktext.c

index d67b57825c3d414a899a32d877705ac96401e99b..39eda89baa431e69d98e2a227435fe757d9c67f2 100644 (file)
@@ -4321,6 +4321,9 @@ gtk_text_enter_text (GtkText    *self,
   int tmp_pos;
   guint text_length;
 
+  gtk_text_history_begin_user_action (priv->history);
+  begin_change (self);
+
   priv->need_im_reset = FALSE;
 
   if (priv->selection_bound != priv->current_pos)
@@ -4338,6 +4341,9 @@ gtk_text_enter_text (GtkText    *self,
   tmp_pos = priv->current_pos;
   gtk_editable_insert_text (GTK_EDITABLE (self), str, strlen (str), &tmp_pos);
   gtk_text_set_selection_bounds (self, tmp_pos, tmp_pos);
+
+  end_change (self);
+  gtk_text_history_end_user_action (priv->history);
 }
 
 /* All changes to priv->current_pos and priv->selection_bound