diff --git a/gtk/gtktext.c b/gtk/gtktext.c index b95d6d8c51..796683e44e 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -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 diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index bfd3616530..2e600e01bb 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -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; }