[gtk+/gtk-2-24] immulticontext: Always check if the global context id changed
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-2-24] immulticontext: Always check if the global context id changed
- Date: Mon, 10 Sep 2012 00:09:17 +0000 (UTC)
commit c8aa94f7a8e761982dd05cb37d16ac6355c7baf9
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Sep 9 20:06:38 2012 -0400
immulticontext: Always check if the global context id changed
This makes sure that if the gtk-im-module setting changes we update
our internal state immediately on the next event whichever it is.
In particular this fixes the case of the gtk-im-module setting
changing while the user is typing and the slave context remaining
the same, effectively ignoring the setting change.
Backport of a0f155e83938f6c3e63c312107dee2a970c2eb15.
https://bugzilla.gnome.org/show_bug.cgi?id=675365
gtk/gtkimmulticontext.c | 23 ++++++++++-------------
1 files changed, 10 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtkimmulticontext.c b/gtk/gtkimmulticontext.c
index 34f34b6..7c603ea 100644
--- a/gtk/gtkimmulticontext.c
+++ b/gtk/gtkimmulticontext.c
@@ -237,6 +237,9 @@ get_effective_context_id (GtkIMMulticontext *multicontext)
static GtkIMContext *
gtk_im_multicontext_get_slave (GtkIMMulticontext *multicontext)
{
+ if (g_strcmp0 (multicontext->context_id, get_effective_context_id (multicontext)) != 0)
+ gtk_im_multicontext_set_slave (multicontext, NULL, FALSE);
+
if (!multicontext->slave)
{
GtkIMContext *slave;
@@ -269,7 +272,8 @@ gtk_im_multicontext_set_client_window (GtkIMContext *context,
GdkWindow *window)
{
GtkIMMulticontext *multicontext = GTK_IM_MULTICONTEXT (context);
- GdkScreen *screen;
+ GtkIMContext *slave;
+ GdkScreen *screen;
GtkSettings *settings;
gboolean connected;
@@ -293,11 +297,9 @@ gtk_im_multicontext_set_client_window (GtkIMContext *context,
}
}
- if (g_strcmp0 (multicontext->context_id, get_effective_context_id (multicontext)) != 0)
- gtk_im_multicontext_set_slave (multicontext, NULL, FALSE);
-
- if (multicontext->slave)
- gtk_im_context_set_client_window (multicontext->slave, window);
+ slave = gtk_im_multicontext_get_slave (multicontext);
+ if (slave)
+ gtk_im_context_set_client_window (slave, window);
}
static void
@@ -356,15 +358,10 @@ static void
gtk_im_multicontext_focus_in (GtkIMContext *context)
{
GtkIMMulticontext *multicontext = GTK_IM_MULTICONTEXT (context);
- GtkIMContext *slave;
-
- if (g_strcmp0 (multicontext->context_id, get_effective_context_id (multicontext)) != 0)
- gtk_im_multicontext_set_slave (multicontext, NULL, FALSE);
+ GtkIMContext *slave = gtk_im_multicontext_get_slave (multicontext);
- slave = gtk_im_multicontext_get_slave (multicontext);
-
multicontext->priv->focus_in = TRUE;
-
+
if (slave)
gtk_im_context_focus_in (slave);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]