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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user