diff --git a/gtk/gtkimcontextwayland.c b/gtk/gtkimcontextwayland.c index c801b40e67..0581772bd6 100644 --- a/gtk/gtkimcontextwayland.c +++ b/gtk/gtkimcontextwayland.c @@ -262,9 +262,14 @@ text_input_delete_surrounding_text_apply (GtkIMContextWaylandGlobal *global) len = context->pending_surrounding_delete.after_length + context->pending_surrounding_delete.before_length; if (len > 0) - g_signal_emit_by_name (global->current, "delete-surrounding", - -context->pending_surrounding_delete.before_length, - len, &retval); + { + g_signal_emit_by_name (global->current, "delete-surrounding", + -context->pending_surrounding_delete.before_length, + len, &retval); + notify_im_change (GTK_IM_CONTEXT_WAYLAND (context), + ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_INPUT_METHOD); + } + context->pending_surrounding_delete = defaults; } @@ -957,6 +962,17 @@ gtk_im_context_wayland_get_surrounding (GtkIMContext *context, return TRUE; } +static void +gtk_im_context_wayland_commit (GtkIMContext *context, + const gchar *str) +{ + if (GTK_IM_CONTEXT_CLASS (gtk_im_context_wayland_parent_class)->commit) + GTK_IM_CONTEXT_CLASS (gtk_im_context_wayland_parent_class)->commit (context, str); + + notify_im_change (GTK_IM_CONTEXT_WAYLAND (context), + ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_INPUT_METHOD); +} + static void gtk_im_context_wayland_class_init (GtkIMContextWaylandClass *klass) { @@ -975,6 +991,7 @@ gtk_im_context_wayland_class_init (GtkIMContextWaylandClass *klass) im_context_class->set_use_preedit = gtk_im_context_wayland_set_use_preedit; im_context_class->set_surrounding_with_selection = gtk_im_context_wayland_set_surrounding; im_context_class->get_surrounding_with_selection = gtk_im_context_wayland_get_surrounding; + im_context_class->commit = gtk_im_context_wayland_commit; } static void diff --git a/gtk/gtktext.c b/gtk/gtktext.c index 2e5d538df5..ba3e22387f 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -4241,7 +4241,6 @@ gtk_text_commit_cb (GtkIMContext *context, { gtk_text_enter_text (self, str); gtk_text_obscure_mouse_cursor (self); - gtk_im_context_reset (context); } } @@ -4302,7 +4301,6 @@ gtk_text_delete_surrounding_cb (GtkIMContext *context, gtk_editable_delete_text (GTK_EDITABLE (self), priv->current_pos + offset, priv->current_pos + offset + n_chars); - gtk_im_context_reset (context); } return TRUE; diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 3b9cce9fc8..7277035dbe 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -8485,7 +8485,6 @@ 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 @@ -8695,9 +8694,8 @@ gtk_text_view_delete_surrounding_handler (GtkIMContext *context, gtk_text_iter_forward_chars (&start, offset); gtk_text_iter_forward_chars (&end, offset + n_chars); - if (gtk_text_buffer_delete_interactive (priv->buffer, &start, &end, - priv->editable)) - gtk_im_context_reset (context); + gtk_text_buffer_delete_interactive (priv->buffer, &start, &end, + priv->editable); return TRUE; }