Merge branch 'realize-vs-focus-in' into 'main'

gtktext: Make sure input method sees focus in

See merge request GNOME/gtk!4402
This commit is contained in:
Carlos Garnacho 2022-01-27 14:13:55 +00:00
commit c8460c51bd

View File

@ -2211,6 +2211,18 @@ gtk_text_unmap (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_text_parent_class)->unmap (widget);
}
static void
gtk_text_im_set_focus_in (GtkText *self)
{
GtkTextPrivate *priv = gtk_text_get_instance_private (self);
if (!priv->editable)
return;
gtk_text_schedule_im_reset (self);
gtk_im_context_focus_in (priv->im_context);
}
static void
gtk_text_realize (GtkWidget *widget)
{
@ -2220,6 +2232,8 @@ gtk_text_realize (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_text_parent_class)->realize (widget);
gtk_im_context_set_client_widget (priv->im_context, widget);
if (gtk_widget_is_focus (GTK_WIDGET (self)))
gtk_text_im_set_focus_in (self);
gtk_text_adjust_scroll (self);
gtk_text_update_primary_selection (self);
@ -3245,12 +3259,7 @@ gtk_text_focus_changed (GtkEventControllerFocus *controller,
g_signal_connect (keyboard, "notify::direction",
G_CALLBACK (direction_changed), self);
if (priv->editable)
{
gtk_text_schedule_im_reset (self);
gtk_im_context_focus_in (priv->im_context);
}
gtk_text_im_set_focus_in (self);
gtk_text_reset_blink_time (self);
}
else /* Focus out */