gnome-initial-setup/gnome-initial-setup-3.28.0-fix-japanese-defaults.patch

92 lines
3.5 KiB
Diff

diff -urN gnome-initial-setup-3.28.0.old/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c gnome-initial-setup-3.28.0/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
--- gnome-initial-setup-3.28.0.old/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c 2020-10-23 09:57:27.493000000 +0100
+++ gnome-initial-setup-3.28.0/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c 2020-10-23 15:03:34.772000000 +0100
@@ -37,6 +37,8 @@
#include "keyboard-resources.h"
#include "cc-input-chooser.h"
+#include "cc-common-language.h"
+
#define GNOME_DESKTOP_INPUT_SOURCES_DIR "org.gnome.desktop.input-sources"
#define KEY_CURRENT_INPUT_SOURCE "current"
#define KEY_INPUT_SOURCES "sources"
@@ -281,8 +283,7 @@
{
const gchar *type;
const gchar *id;
- const gchar * const *locales;
- const gchar *language;
+ gchar *language;
GVariantBuilder builder;
GSettings *input_settings;
@@ -292,12 +293,12 @@
add_default_keyboard_layout (proxy, &builder);
/* add other input sources */
- locales = g_get_language_names ();
- language = locales[0];
+ language = cc_common_language_get_current_language ();
if (gnome_get_input_source_from_locale (language, &type, &id)) {
if (!g_str_equal (type, "xkb"))
g_variant_builder_add (&builder, "(ss)", type, id);
}
+ g_free (language);
g_settings_delay (input_settings);
g_settings_set_value (input_settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder));
@@ -346,8 +347,12 @@
}
static void
-load_localed_input (GisKeyboardPage *self)
+preselect_input_source (GisKeyboardPage *self)
{
+ const gchar *type;
+ const gchar *id;
+ gchar *language;
+
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
GSList * sources = get_localed_input (priv->localed);
@@ -356,11 +361,28 @@
g_slist_free_full (priv->system_sources, g_free);
priv->system_sources = g_slist_reverse (sources);
- /* We only pre-select the first system layout. */
- if (priv->system_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. */
+ language = cc_common_language_get_current_language ();
+
+ if (!priv->system_sources ||
+ (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);
+ } else {
cc_input_chooser_set_input (CC_INPUT_CHOOSER (priv->input_chooser),
(const gchar *) priv->system_sources->data,
"xkb");
+ }
+
+ g_free (language);
}
static void
@@ -395,7 +417,7 @@
priv->localed = proxy;
- load_localed_input (self);
+ preselect_input_source (self);
update_page_complete (self);
}