From c2e0c03c03f47da9b117db0ba876732e84dcf0c4 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Mon, 16 May 2016 19:18:43 -0500 Subject: [PATCH] Resurrect the code from upstream to set the default keyboard from XKB if there is one. Suse works differently than GNOME here; we set a default keyboard from the system's configuration instead of letting GNOME take care of everything itself. https://bugzilla.suse.com/show_bug.cgi?id=979051 --- plugins/keyboard/gsd-keyboard-manager.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) Index: gnome-settings-daemon-3.26.0/plugins/keyboard/gsd-keyboard-manager.c =================================================================== --- gnome-settings-daemon-3.26.0.orig/plugins/keyboard/gsd-keyboard-manager.c 2017-09-14 13:42:53.415421010 +0200 +++ gnome-settings-daemon-3.26.0/plugins/keyboard/gsd-keyboard-manager.c 2017-09-14 13:42:58.455409895 +0200 @@ -433,7 +433,7 @@ } static void -get_sources_from_xkb_config (GsdKeyboardManager *manager) +get_sources_from_xkb_config (GsdKeyboardManager *manager, gboolean running_under_gdm) { GsdKeyboardManagerPrivate *priv = manager->priv; GVariantBuilder builder; @@ -452,7 +452,7 @@ init_builder_with_sources (&builder, priv->input_sources_settings); - if (!layouts) { + if (!layouts && running_under_gdm) { g_variant_builder_add (&builder, "(ss)", INPUT_SOURCE_TYPE_XKB, DEFAULT_LAYOUT); goto out; } @@ -632,15 +632,23 @@ settings = manager->priv->input_sources_settings; - if (g_getenv ("RUNNING_UNDER_GDM")) - return; + if (g_getenv ("RUNNING_UNDER_GDM")) { + GVariantBuilder builder; + /* clean the settings and get them from the "system" */ + 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, TRUE); + + g_settings_set_strv (settings, KEY_KEYBOARD_OPTIONS, NULL); + get_options_from_xkb_config (manager); + } maybe_convert_old_settings (settings); /* if we still don't have anything do some educated guesses */ sources = g_settings_get_value (settings, KEY_INPUT_SOURCES); if (g_variant_n_children (sources) < 1) - get_sources_from_xkb_config (manager); + get_sources_from_xkb_config (manager, FALSE); g_variant_unref (sources); options = g_settings_get_strv (settings, KEY_KEYBOARD_OPTIONS);