Backport MR #83 to fix preselection of input methods
This commit is contained in:
parent
af4ef5dce5
commit
e3b3925c7a
@ -0,0 +1,91 @@
|
|||||||
|
From 9e0483079845da8d998e4fc58dab409d540817f6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Adam Williamson <awilliam@redhat.com>
|
||||||
|
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 <awilliam@redhat.com>
|
||||||
|
---
|
||||||
|
.../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
|
||||||
|
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
Name: gnome-initial-setup
|
Name: gnome-initial-setup
|
||||||
Version: 3.37.1
|
Version: 3.37.1
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Summary: Bootstrapping your OS
|
Summary: Bootstrapping your OS
|
||||||
|
|
||||||
License: GPLv2+
|
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
|
Source0: https://download.gnome.org/sources/%{name}/3.37/%{name}-%{version}.tar.xz
|
||||||
Source1: vendor.conf
|
Source1: vendor.conf
|
||||||
Patch0: honor-firstboot-disabled.patch
|
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: meson
|
||||||
BuildRequires: gcc
|
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
|
%{_datadir}/gnome-initial-setup/vendor.conf
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon May 04 2020 Adam Williamson <awilliam@redhat.com> - 3.37.1-1.1
|
||||||
|
- Backport MR #83 to fix preselection of input methods
|
||||||
|
|
||||||
* Thu Apr 30 2020 Kalev Lember <klember@redhat.com> - 3.37.1-1
|
* Thu Apr 30 2020 Kalev Lember <klember@redhat.com> - 3.37.1-1
|
||||||
- Update to 3.37.1
|
- Update to 3.37.1
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user