[gnome-settings-daemon] keyboard: Get XKB options from localed



commit 212fde328dba92fd27616147d3755d4eb774ae3b
Author: Rui Matos <tiagomatos gmail com>
Date:   Thu Feb 28 16:24:33 2013 +0100

    keyboard: Get XKB options from localed
    
    Some users might have XKB options configured in their xorg.conf. In
    case the current user's setting is empty or when running under GDM we
    should honor the system options.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=694877

 plugins/keyboard/gsd-keyboard-manager.c |   32 +++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)
---
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
index 5e6c3f3..c5d8666 100644
--- a/plugins/keyboard/gsd-keyboard-manager.c
+++ b/plugins/keyboard/gsd-keyboard-manager.c
@@ -1347,6 +1347,29 @@ get_sources_from_xkb_config (GsdKeyboardManager *manager)
 }
 
 static void
+get_options_from_xkb_config (GsdKeyboardManager *manager)
+{
+        GsdKeyboardManagerPrivate *priv = manager->priv;
+        GVariant *v;
+        gchar **options = NULL;
+
+        v = g_dbus_proxy_get_cached_property (priv->localed, "X11Options");
+        if (v) {
+                const gchar *s = g_variant_get_string (v, NULL);
+                if (*s)
+                        options = g_strsplit (s, ",", -1);
+                g_variant_unref (v);
+        }
+
+        if (!options)
+                return;
+
+        g_settings_set_strv (priv->input_sources_settings, KEY_KEYBOARD_OPTIONS, (const gchar * const*) 
options);
+
+        g_strfreev (options);
+}
+
+static void
 convert_libgnomekbd_options (GSettings *settings)
 {
         GPtrArray *opt_array;
@@ -1470,6 +1493,7 @@ maybe_create_initial_settings (GsdKeyboardManager *manager)
 {
         GSettings *settings;
         GVariant *sources;
+        gchar **options;
 
         settings = manager->priv->input_sources_settings;
 
@@ -1479,6 +1503,9 @@ maybe_create_initial_settings (GsdKeyboardManager *manager)
                 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)"));
                 g_settings_set_value (settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder));
                 get_sources_from_xkb_config (manager);
+
+                g_settings_set_strv (settings, KEY_KEYBOARD_OPTIONS, NULL);
+                get_options_from_xkb_config (manager);
                 return;
         }
 
@@ -1493,6 +1520,11 @@ maybe_create_initial_settings (GsdKeyboardManager *manager)
 #endif
         }
         g_variant_unref (sources);
+
+        options = g_settings_get_strv (settings, KEY_KEYBOARD_OPTIONS);
+        if (g_strv_length (options) < 1)
+                get_options_from_xkb_config (manager);
+        g_strfreev (options);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]