diff options
-rw-r--r-- | gtk/gtktext.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/gtk/gtktext.c b/gtk/gtktext.c index 3a390fcc11..70b100fa55 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_text_schedule_im_reset), self); + G_CALLBACK (gtk_im_context_reset), priv->im_context); 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); @@ -3773,8 +3773,6 @@ gtk_text_move_cursor (GtkText *self, GtkTextPrivate *priv = gtk_text_get_instance_private (self); int new_pos = priv->current_pos; - gtk_text_reset_im_context (self); - if (priv->current_pos != priv->selection_bound && !extend_selection) { /* If we have a current selection and aren't extending it, move to the @@ -3901,6 +3899,9 @@ gtk_text_move_cursor (GtkText *self, gtk_text_set_selection_bounds (self, new_pos, new_pos); gtk_text_pend_cursor_blink (self); + + priv->need_im_reset = TRUE; + gtk_text_reset_im_context (self); } static void @@ -3928,8 +3929,6 @@ gtk_text_delete_from_cursor (GtkText *self, int end_pos = priv->current_pos; int old_n_bytes = gtk_entry_buffer_get_bytes (get_buffer (self)); - gtk_text_reset_im_context (self); - if (!priv->editable) { gtk_widget_error_bell (GTK_WIDGET (self)); @@ -3939,6 +3938,8 @@ gtk_text_delete_from_cursor (GtkText *self, if (priv->selection_bound != priv->current_pos) { gtk_text_delete_selection (self); + gtk_text_schedule_im_reset (self); + gtk_text_reset_im_context (self); return; } @@ -4003,6 +4004,11 @@ gtk_text_delete_from_cursor (GtkText *self, if (gtk_entry_buffer_get_bytes (get_buffer (self)) == old_n_bytes) gtk_widget_error_bell (GTK_WIDGET (self)); + else + { + gtk_text_schedule_im_reset (self); + gtk_text_reset_im_context (self); + } gtk_text_pend_cursor_blink (self); } @@ -4013,8 +4019,6 @@ gtk_text_backspace (GtkText *self) GtkTextPrivate *priv = gtk_text_get_instance_private (self); int prev_pos; - gtk_text_reset_im_context (self); - if (!priv->editable) { gtk_widget_error_bell (GTK_WIDGET (self)); @@ -4024,6 +4028,8 @@ gtk_text_backspace (GtkText *self) if (priv->selection_bound != priv->current_pos) { gtk_text_delete_selection (self); + gtk_text_schedule_im_reset (self); + gtk_text_reset_im_context (self); return; } @@ -4068,6 +4074,9 @@ gtk_text_backspace (GtkText *self) { gtk_editable_delete_text (GTK_EDITABLE (self), prev_pos, priv->current_pos); } + + gtk_text_schedule_im_reset (self); + gtk_text_reset_im_context (self); } else { |