From e3b3925c7af9d01c25e64cc17f57454a73031763 Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: May 04 2020 23:59:06 +0000 Subject: Backport MR #83 to fix preselection of input methods --- diff --git a/0001-Fix-default-keyboard-layout-input-source-choice-prio.patch b/0001-Fix-default-keyboard-layout-input-source-choice-prio.patch new file mode 100644 index 0000000..b6406bd --- /dev/null +++ b/0001-Fix-default-keyboard-layout-input-source-choice-prio.patch @@ -0,0 +1,91 @@ +From 9e0483079845da8d998e4fc58dab409d540817f6 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Mon, 4 May 2020 13:59:04 -0700 +Subject: [PATCH] Fix default keyboard layout / input source choice priority + (#104) + +This attempts to fix the problem I identified in #104 while also +not breaking for the case where there is no system source and +gnome_get_input_source_from_locale returns nothing. It should +implement the intended logic fully: + +* If gnome-desktop gives us an input source, always preselect that +* If gnome-desktop gives us a keyboard layout and there's no + system sources, preselect the layout gnome-desktop gave us +* If there is a system source and we didn't get an input source + from gnome-desktop, preselect the system source + +Signed-off-by: Adam Williamson +--- + .../pages/keyboard/gis-keyboard-page.c | 43 +++++++++++++------ + 1 file changed, 29 insertions(+), 14 deletions(-) + +diff --git a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c +index fc139ee..a0c3d27 100644 +--- a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c ++++ b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c +@@ -354,6 +354,8 @@ preselect_input_source (GisKeyboardPage *self) + const gchar *type; + const gchar *id; + gchar *language; ++ gboolean desktop_got_something; ++ gboolean desktop_got_input_method; + + GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self); + GSList *sources = get_localed_input (priv->localed); +@@ -363,25 +365,38 @@ preselect_input_source (GisKeyboardPage *self) + g_slist_free_full (priv->system_sources, g_free); + priv->system_sources = g_slist_reverse (sources); + +- /* For languages that use an input method, we will add both +- * system keyboard layout and the ibus input method. For +- * languages that use keyboard layout only, we will add only +- * system keyboard layout. Because the keyboard layout +- * information from gnome-desktop is not as accurate as system +- * keyboard layout, if gnome-desktop returns keyboard layout, +- * we ignore it and use system keyboard layout instead. If +- * gnome-desktop instead returns an ibus input method, we will +- * add both system keyboard layout and the ibus input method. */ ++ /* We have two potential sources of information as to which ++ * source to pre-select here: the keyboard layout that is ++ * configured system-wide (read from priv->system_sources), ++ * and a gnome-desktop function that lets us look up a default ++ * input source for a given language. An important limitation ++ * here is that there is no system-wide configuration for ++ * input methods, so if the best choice for the language is an ++ * input method, we will only find it from the gnome-desktop ++ * lookup. But if both sources give us keyboard layouts, we ++ * want to prefer the one that's configured system-wide over ++ * the one from gnome-desktop. So we first do the gnome-desktop ++ * lookup, and keep track of what we got. If we got an input ++ * method, we preselect that, and we're done. If we got a ++ * keyboard layout, and there's no system-wide keyboard layout ++ * set, we preselect the layout we got from gnome-desktop. If ++ * we didn't get an input method from gnome-desktop and there ++ * is a system-wide keyboard layout set, we preselect that. If ++ * we got nothing from gnome-desktop and there's no system-wide ++ * keyboard layout set, we don't preselect anything. See: ++ * https://bugzilla.gnome.org/show_bug.cgi?id=776189 */ + language = cc_common_language_get_current_language (); + +- if (priv->system_sources) { ++ desktop_got_something = gnome_get_input_source_from_locale (language, &type, &id); ++ desktop_got_input_method = (desktop_got_something && g_strcmp0 (type, "xkb") != 0); ++ ++ if (desktop_got_input_method || (!priv->system_sources && desktop_got_something)) { ++ cc_input_chooser_set_input (CC_INPUT_CHOOSER (priv->input_chooser), ++ id, type); ++ } else if (priv->system_sources) { + cc_input_chooser_set_input (CC_INPUT_CHOOSER (priv->input_chooser), + (const gchar *) priv->system_sources->data, + "xkb"); +- } else if (gnome_get_input_source_from_locale (language, &type, &id) && +- g_strcmp0 (type, "xkb") != 0) { +- cc_input_chooser_set_input (CC_INPUT_CHOOSER (priv->input_chooser), +- id, type); + } + + g_free (language); +-- +2.26.2 + diff --git a/gnome-initial-setup.spec b/gnome-initial-setup.spec index bf688bd..859794e 100644 --- a/gnome-initial-setup.spec +++ b/gnome-initial-setup.spec @@ -6,7 +6,7 @@ Name: gnome-initial-setup Version: 3.37.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Bootstrapping your OS License: GPLv2+ @@ -14,6 +14,9 @@ URL: https://wiki.gnome.org/Design/OS/InitialSetup Source0: https://download.gnome.org/sources/%{name}/3.37/%{name}-%{version}.tar.xz Source1: vendor.conf Patch0: honor-firstboot-disabled.patch +# Fix preselection of input methods +# https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/merge_requests/83 +Patch1: 0001-Fix-default-keyboard-layout-input-source-choice-prio.patch BuildRequires: meson BuildRequires: gcc @@ -108,6 +111,9 @@ useradd -rM -d /run/gnome-initial-setup/ -s /sbin/nologin %{name} &>/dev/null || %{_datadir}/gnome-initial-setup/vendor.conf %changelog +* Mon May 04 2020 Adam Williamson - 3.37.1-1.1 +- Backport MR #83 to fix preselection of input methods + * Thu Apr 30 2020 Kalev Lember - 3.37.1-1 - Update to 3.37.1