Merge branch 'wip/carlosg/im-reset' into 'main'

Avoid early IM reset on updates

Closes #5133

See merge request GNOME/gtk!5012
This commit is contained in:
Matthias Clasen
2022-09-09 12:36:43 +00:00
2 changed files with 12 additions and 19 deletions

View File

@@ -1910,7 +1910,7 @@ gtk_text_init (GtkText *self)
g_signal_connect (priv->key_controller, "key-pressed",
G_CALLBACK (gtk_text_key_controller_key_pressed), self);
g_signal_connect_swapped (priv->key_controller, "im-update",
G_CALLBACK (gtk_im_context_reset), priv->im_context);
G_CALLBACK (gtk_text_schedule_im_reset), self);
gtk_event_controller_key_set_im_context (GTK_EVENT_CONTROLLER_KEY (priv->key_controller),
priv->im_context);
gtk_widget_add_controller (GTK_WIDGET (self), priv->key_controller);
@@ -4241,6 +4241,7 @@ gtk_text_commit_cb (GtkIMContext *context,
{
gtk_text_enter_text (self, str);
gtk_text_obscure_mouse_cursor (self);
gtk_im_context_reset (context);
}
}
@@ -4297,9 +4298,12 @@ gtk_text_delete_surrounding_cb (GtkIMContext *context,
GtkTextPrivate *priv = gtk_text_get_instance_private (self);
if (priv->editable)
gtk_editable_delete_text (GTK_EDITABLE (self),
priv->current_pos + offset,
priv->current_pos + offset + n_chars);
{
gtk_editable_delete_text (GTK_EDITABLE (self),
priv->current_pos + offset,
priv->current_pos + offset + n_chars);
gtk_im_context_reset (context);
}
return TRUE;
}
@@ -4314,10 +4318,8 @@ gtk_text_enter_text (GtkText *self,
{
GtkTextPrivate *priv = gtk_text_get_instance_private (self);
int tmp_pos;
gboolean old_need_im_reset;
guint text_length;
old_need_im_reset = priv->need_im_reset;
priv->need_im_reset = FALSE;
if (priv->selection_bound != priv->current_pos)
@@ -4335,8 +4337,6 @@ 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);
priv->need_im_reset = old_need_im_reset;
}
/* All changes to priv->current_pos and priv->selection_bound

View File

@@ -5524,17 +5524,8 @@ gtk_text_view_key_controller_im_update (GtkEventControllerKey *controller,
GtkTextView *text_view)
{
GtkTextViewPrivate *priv = text_view->priv;
GtkTextMark *insert;
GtkTextIter iter;
gboolean can_insert;
insert = gtk_text_buffer_get_insert (get_buffer (text_view));
gtk_text_buffer_get_iter_at_mark (get_buffer (text_view), &iter, insert);
can_insert = gtk_text_iter_can_insert (&iter, priv->editable);
priv->need_im_reset = TRUE;
if (can_insert)
gtk_text_view_reset_im_context (text_view);
}
static gboolean
@@ -8494,6 +8485,7 @@ gtk_text_view_commit_handler (GtkIMContext *context,
gtk_text_view_commit_text (text_view, str);
gtk_text_view_reset_blink_time (text_view);
gtk_text_view_pend_cursor_blink (text_view);
gtk_im_context_reset (context);
}
static void
@@ -8703,8 +8695,9 @@ gtk_text_view_delete_surrounding_handler (GtkIMContext *context,
gtk_text_iter_forward_chars (&start, offset);
gtk_text_iter_forward_chars (&end, offset + n_chars);
gtk_text_buffer_delete_interactive (priv->buffer, &start, &end,
priv->editable);
if (gtk_text_buffer_delete_interactive (priv->buffer, &start, &end,
priv->editable))
gtk_im_context_reset (context);
return TRUE;
}