summaryrefslogtreecommitdiff
path: root/gtk/gtkimmodule.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2013-08-11 15:35:07 -0400
committerMatthias Clasen <mclasen@redhat.com>2013-08-11 15:38:25 -0400
commitf4a138c7bd9baf56685b4c8193f1371530a8f028 (patch)
tree9b91ca58fca5533d65ad5bfe65e6d2a8d5d12fa5 /gtk/gtkimmodule.c
parent87257342de456c936cf9dab63b9aaa9402b84e68 (diff)
downloadgtk+-f4a138c7bd9baf56685b4c8193f1371530a8f028.tar.gz
GtkIMModule: Use default screen when determining context id
This code is called early on, without a window, and then later on with a window. Currently, it returns different results for these cases when the setting contains a value. That leads to pointless construction and destruction of im contexts. Instead, just look at the settings of the default screen. In practice, there is only one screen, ever.
Diffstat (limited to 'gtk/gtkimmodule.c')
-rw-r--r--gtk/gtkimmodule.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/gtk/gtkimmodule.c b/gtk/gtkimmodule.c
index e6372f2edb..2cbf9da167 100644
--- a/gtk/gtkimmodule.c
+++ b/gtk/gtkimmodule.c
@@ -680,16 +680,16 @@ _gtk_im_module_get_default_context_id (GdkWindow *client_window)
const gchar *envvar;
GdkScreen *screen;
GtkSettings *settings;
-
+
if (!contexts_hash)
gtk_im_module_initialize ();
- envvar = g_getenv("GTK_IM_MODULE");
+ envvar = g_getenv ("GTK_IM_MODULE");
if (envvar)
{
- immodules = g_strsplit(envvar, ":", 0);
- context_id = lookup_immodule(immodules);
- g_strfreev(immodules);
+ immodules = g_strsplit (envvar, ":", 0);
+ context_id = lookup_immodule (immodules);
+ g_strfreev (immodules);
if (context_id)
return context_id;
@@ -697,21 +697,18 @@ _gtk_im_module_get_default_context_id (GdkWindow *client_window)
/* Check if the certain immodule is set in XSETTINGS.
*/
- if (GDK_IS_WINDOW (client_window))
+ screen = gdk_screen_get_default ();
+ settings = gtk_settings_get_for_screen (screen);
+ g_object_get (G_OBJECT (settings), "gtk-im-module", &tmp, NULL);
+ if (tmp)
{
- screen = gdk_window_get_screen (client_window);
- settings = gtk_settings_get_for_screen (screen);
- g_object_get (G_OBJECT (settings), "gtk-im-module", &tmp, NULL);
- if (tmp)
- {
- immodules = g_strsplit(tmp, ":", 0);
- context_id = lookup_immodule(immodules);
- g_strfreev(immodules);
- g_free (tmp);
-
- if (context_id)
- return context_id;
- }
+ immodules = g_strsplit (tmp, ":", 0);
+ context_id = lookup_immodule (immodules);
+ g_strfreev (immodules);
+ g_free (tmp);
+
+ if (context_id)
+ return context_id;
}
/* Strip the locale code down to the essentials
@@ -723,12 +720,12 @@ _gtk_im_module_get_default_context_id (GdkWindow *client_window)
tmp = strchr (tmp_locale, '@');
if (tmp)
*tmp = '\0';
-
+
tmp_list = modules_list;
while (tmp_list)
{
GtkIMModule *module = tmp_list->data;
-
+
for (i = 0; i < module->n_contexts; i++)
{
const gchar *p = module->contexts[i]->default_locales;
@@ -746,11 +743,11 @@ _gtk_im_module_get_default_context_id (GdkWindow *client_window)
p = q ? q + 1 : NULL;
}
}
-
+
tmp_list = tmp_list->next;
}
g_free (tmp_locale);
-
+
return context_id ? context_id : SIMPLE_ID;
}