mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 06:00:22 +00:00
gtkimmulticontext: Handle switches between displays
Currently the GtkIMMultiContext may stick to a delegate GtkIMContext that no longer applies after the multicontext is dissociated from any widget. Handle set_client_widget() so that it can handle changes between widgets from 2 different display, but also so the delegate is made NULL whenever the context has a NULL widget. Doing so, any new client widget results in a new delegate IM context lookup from the right GdkDisplay and GtkSettings, which avoids any mix up. Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4805
This commit is contained in:
parent
04c9c6b428
commit
b67da38916
@ -314,6 +314,11 @@ gtk_im_multicontext_set_client_widget (GtkIMContext *context,
|
||||
GtkIMContext *delegate;
|
||||
GtkSettings *settings;
|
||||
|
||||
if (priv->client_widget == widget)
|
||||
return;
|
||||
|
||||
gtk_im_multicontext_set_delegate (self, NULL, TRUE);
|
||||
|
||||
if (priv->client_widget != NULL)
|
||||
{
|
||||
settings = gtk_widget_get_settings (priv->client_widget);
|
||||
@ -332,11 +337,11 @@ gtk_im_multicontext_set_client_widget (GtkIMContext *context,
|
||||
g_signal_connect (settings, "notify::gtk-im-module",
|
||||
G_CALLBACK (im_module_setting_changed),
|
||||
self);
|
||||
}
|
||||
|
||||
delegate = gtk_im_multicontext_get_delegate (self);
|
||||
if (delegate)
|
||||
gtk_im_context_set_client_widget (delegate, widget);
|
||||
delegate = gtk_im_multicontext_get_delegate (self);
|
||||
if (delegate)
|
||||
gtk_im_context_set_client_widget (delegate, widget);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user