diff --git a/0002-gnome-languages-Add-function-to-detect-non-latin-lay.patch b/0002-gnome-languages-Add-function-to-detect-non-latin-lay.patch index 1b5a331..8d828f4 100644 --- a/0002-gnome-languages-Add-function-to-detect-non-latin-lay.patch +++ b/0002-gnome-languages-Add-function-to-detect-non-latin-lay.patch @@ -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 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]) + diff --git a/0003-meson-Add-codegen-for-localed.patch b/0003-meson-Add-codegen-for-localed.patch index 3b12dd9..9ce34d3 100644 --- a/0003-meson-Add-codegen-for-localed.patch +++ b/0003-meson-Add-codegen-for-localed.patch @@ -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 Date: Thu, 24 Aug 2023 17:43:00 -0400 Subject: [PATCH 3/4] meson: Add codegen for localed diff --git a/0004-languages-Add-functions-for-getting-default-input-so.patch b/0004-languages-Add-functions-for-getting-default-input-so.patch index 67ac30f..75682ff 100644 --- a/0004-languages-Add-functions-for-getting-default-input-so.patch +++ b/0004-languages-Add-functions-for-getting-default-input-so.patch @@ -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 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,