Address niche edge case with certain bulgarian layouts
This commit is contained in:
parent
b1bdaaaf95
commit
697e80ee94
@ -1,4 +1,4 @@
|
||||
From 7f2608dc9e9c3bedaf166f49eb3a39432665cbac Mon Sep 17 00:00:00 2001
|
||||
From 242308344cceca729148507d787f130151b44ea0 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Thu, 24 Aug 2023 17:37:37 -0400
|
||||
Subject: [PATCH 2/4] gnome-languages: Add function to detect non-latin layouts
|
||||
@ -9,32 +9,37 @@ a way to input latin characters.
|
||||
This commit adds a function to detect layouts that need supplemental
|
||||
layouts to tag along.
|
||||
---
|
||||
.../generate-non-latin-input-sources.py | 39 +++++++++++++++++++
|
||||
libgnome-desktop/gnome-languages.c | 30 ++++++++++++++
|
||||
.../generate-non-latin-input-sources.py | 44 +++++++++++++++++++
|
||||
libgnome-desktop/gnome-languages.c | 30 +++++++++++++
|
||||
libgnome-desktop/gnome-languages.h | 2 +
|
||||
libgnome-desktop/meson.build | 7 ++++
|
||||
4 files changed, 78 insertions(+)
|
||||
libgnome-desktop/meson.build | 7 +++
|
||||
4 files changed, 83 insertions(+)
|
||||
create mode 100644 libgnome-desktop/generate-non-latin-input-sources.py
|
||||
|
||||
diff --git a/libgnome-desktop/generate-non-latin-input-sources.py b/libgnome-desktop/generate-non-latin-input-sources.py
|
||||
new file mode 100644
|
||||
index 00000000..f0403268
|
||||
index 00000000..d2b84f08
|
||||
--- /dev/null
|
||||
+++ b/libgnome-desktop/generate-non-latin-input-sources.py
|
||||
@@ -0,0 +1,39 @@
|
||||
@@ -0,0 +1,44 @@
|
||||
+import langtable
|
||||
+import locale
|
||||
+
|
||||
+all_locales = [locale.normalize(locale_id) for locale_id in locale.locale_alias.values()]
|
||||
+import locale
|
||||
+import re
|
||||
+
|
||||
+if hasattr(langtable, 'list_all_keyboards'):
|
||||
+ keyboards = langtable.list_all_keyboards()
|
||||
+else:
|
||||
+ from langtable.langtable import _keyboards_db
|
||||
+ keyboards = _keyboards_db.keys()
|
||||
+
|
||||
+non_latin_keyboards = {}
|
||||
+
|
||||
+for locale in all_locales:
|
||||
+ keyboards = langtable.list_keyboards(languageId=locale)
|
||||
+ for keyboard in keyboards:
|
||||
+ # Check if the keyboard supports ASCII
|
||||
+ if not langtable.supports_ascii(keyboardId=keyboard):
|
||||
+ non_latin_keyboards[keyboard] = 'xkb'
|
||||
+for keyboard in keyboards:
|
||||
+ # Check if the keyboard supports ASCII
|
||||
+ if not langtable.supports_ascii(keyboardId=keyboard):
|
||||
+ input_source = re.sub(r'\((.*?)\)', r'+\1', keyboard)
|
||||
+ non_latin_keyboards[input_source] = 'xkb'
|
||||
+
|
||||
+sorted_non_latin_keyboards = sorted(non_latin_keyboards.items(), key=lambda x: x[0])
|
||||
+
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 89a3384c5dbe31d05fcef377a9efb17202e5ca5a Mon Sep 17 00:00:00 2001
|
||||
From 185c1f7541ee44095ec5d9348298510e28e37f2c Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Thu, 24 Aug 2023 17:43:00 -0400
|
||||
Subject: [PATCH 3/4] meson: Add codegen for localed
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 85494f9909bd142f0000b7acd47a10f646739aa7 Mon Sep 17 00:00:00 2001
|
||||
From f9dc0fefa8abfe37ea2029fefb6e49c2f3a0a696 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Thu, 24 Aug 2023 19:58:17 -0400
|
||||
Subject: [PATCH 4/4] languages: Add functions for getting default input
|
||||
@ -17,12 +17,12 @@ gnome_get_default_input_sources_finish
|
||||
Note, these functions don't provide change notification, so there
|
||||
is still some redundancy needed by callers.
|
||||
---
|
||||
libgnome-desktop/gnome-languages.c | 320 +++++++++++++++++++++++++++++
|
||||
libgnome-desktop/gnome-languages.c | 341 +++++++++++++++++++++++++++++
|
||||
libgnome-desktop/gnome-languages.h | 11 +
|
||||
2 files changed, 331 insertions(+)
|
||||
2 files changed, 352 insertions(+)
|
||||
|
||||
diff --git a/libgnome-desktop/gnome-languages.c b/libgnome-desktop/gnome-languages.c
|
||||
index 3bd4823f..48e6883f 100644
|
||||
index 3bd4823f..5d6c8b94 100644
|
||||
--- a/libgnome-desktop/gnome-languages.c
|
||||
+++ b/libgnome-desktop/gnome-languages.c
|
||||
@@ -16,81 +16,89 @@
|
||||
@ -115,7 +115,7 @@ index 3bd4823f..48e6883f 100644
|
||||
}
|
||||
|
||||
static char *
|
||||
@@ -1447,30 +1455,342 @@ gnome_get_input_source_from_locale (const char *locale,
|
||||
@@ -1447,30 +1455,363 @@ gnome_get_input_source_from_locale (const char *locale,
|
||||
}
|
||||
|
||||
/**
|
||||
@ -329,6 +329,10 @@ index 3bd4823f..48e6883f 100644
|
||||
+
|
||||
+ if (number_of_layouts == number_of_variants) {
|
||||
+ g_autoptr(GnomeXkbInfo) xkb_info = gnome_xkb_info_new ();
|
||||
+ g_autofree char *system_language = NULL;
|
||||
+
|
||||
+ gnome_parse_locale (system_locale, &system_language, NULL, NULL, NULL);
|
||||
+
|
||||
+ for (i = 0; layouts[i] != NULL; i++) {
|
||||
+ g_autofree InputSource *input_source = g_new0 (InputSource, 1);
|
||||
+
|
||||
@ -348,6 +352,20 @@ index 3bd4823f..48e6883f 100644
|
||||
+
|
||||
+ if (g_strcmp0 (input_method_language, layout_language) == 0)
|
||||
+ continue;
|
||||
+ } else if (system_language != NULL) {
|
||||
+ GList *languages = NULL, *node = NULL;
|
||||
+ const char *system_language_name = get_language (system_language);
|
||||
+
|
||||
+ languages = gnome_xkb_info_get_languages_for_layout (xkb_info, layouts[i]);
|
||||
+ for (node = languages; node != NULL; node = node->next) {
|
||||
+ const char *language_name = get_language (node->data);
|
||||
+
|
||||
+ if (g_strcmp0 (system_language_name, language_name) == 0) {
|
||||
+ g_clear_pointer (&locale_input_source, g_free);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ g_list_free (languages);
|
||||
+ }
|
||||
+
|
||||
+ g_ptr_array_add (input_sources, g_steal_pointer (&input_source));
|
||||
@ -395,6 +413,9 @@ index 3bd4823f..48e6883f 100644
|
||||
+ gpointer user_data)
|
||||
+{
|
||||
+ GTask *task;
|
||||
+
|
||||
+ languages_init ();
|
||||
+
|
||||
+ task = g_task_new (NULL,
|
||||
+ cancellable,
|
||||
+ callback,
|
||||
|
Loading…
Reference in New Issue
Block a user