[master] [PATCH] Use both language and country to guess layout (#861061)

Vratislav Podzimek vpodzime at redhat.com
Fri Nov 2 18:45:41 UTC 2012


Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
---
 pyanaconda/keyboard.py              | 31 +++++++++++++++++++++++++++++--
 pyanaconda/ui/gui/spokes/welcome.py |  8 +++++---
 2 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/pyanaconda/keyboard.py b/pyanaconda/keyboard.py
index 5aa9c5d..c8024af 100755
--- a/pyanaconda/keyboard.py
+++ b/pyanaconda/keyboard.py
@@ -290,6 +290,10 @@ class _Layout(object):
     def __str__(self):
         return '%s (%s)' % (self.name, self.desc)
 
+    def __eq__(self, obj):
+        return isinstance(obj, self.__class__) and \
+            self.name == obj.name
+
     @property
     def description(self):
         return self.desc
@@ -357,6 +361,7 @@ class XklWrapper(object):
 
         #this might take quite a long time
         self.configreg.foreach_language(self._get_language_variants, None)
+        self.configreg.foreach_country(self._get_country_variants, None)
 
         #'grp' means that we want layout (group) switching options
         self.configreg.foreach_option('grp', self._get_switch_option, None)
@@ -369,7 +374,9 @@ class XklWrapper(object):
             name = item_str(item.name)
             description = item_str(item.description)
 
-        self.name_to_show_str[name] = "%s (%s)" % (dest.encode("utf-8"), description.encode("utf-8"))
+        if dest:
+            self.name_to_show_str[name] = "%s (%s)" % (dest.encode("utf-8"),
+                                                       description.encode("utf-8"))
         self._variants_list.append(_Layout(name, description))
 
     def _get_language_variants(self, c_reg, item, user_data=None):
@@ -388,7 +395,7 @@ class XklWrapper(object):
 
         c_reg.foreach_country_variant(country_name, self._get_variant, None)
 
-        self._country_keyboard_variants[(country_name, country_desc)] = self._variants_list
+        self._country_keyboard_variants[country_name] = self._variants_list
 
     def _get_switch_option(self, c_reg, item, user_data=None):
         """Helper function storing layout switching options in foreach cycle"""
@@ -421,6 +428,26 @@ class XklWrapper(object):
         #first layout (should exist for every language)
         return language_layouts[0].name
 
+    def get_default_lang_country_layout(self, language, country):
+        """
+        Get default layout matching both language and country. If none such
+        layout is found, get default layout for language.
+
+        """
+
+        language_layouts = self._language_keyboard_variants.get(language, None)
+        country_layouts = self._country_keyboard_variants.get(country, None)
+        if not language_layouts:
+            return None
+
+        matches_both = (layout for layout in language_layouts
+                                if layout in country_layouts)
+
+        try:
+            return matches_both.next().name
+        except StopIteration:
+            return language_layouts[0].name
+
     def get_current_layout_name(self):
         """
         Get current activated X layout's name
diff --git a/pyanaconda/ui/gui/spokes/welcome.py b/pyanaconda/ui/gui/spokes/welcome.py
index e9119dc..d99cd84 100644
--- a/pyanaconda/ui/gui/spokes/welcome.py
+++ b/pyanaconda/ui/gui/spokes/welcome.py
@@ -26,6 +26,7 @@ import gettext
 _ = lambda x: gettext.ldgettext("anaconda", x)
 N_ = lambda x: x
 
+# pylint: disable-msg=E0611
 from gi.repository import AnacondaWidgets, Gtk
 from pyanaconda.ui.gui.hubs.summary import SummaryHub
 from pyanaconda.ui.gui.spokes import StandaloneSpoke, NormalSpoke
@@ -81,12 +82,13 @@ class LanguageMixIn(object):
         #e.g. 'English (United States)' -> 'English'
         lang_name = store[itr][1]
         lang_name = lang_name.split()[0]
+        country = self.language.preferred_locale.territory
 
         #add one language-related and 'English (US)' layouts by default
         new_layouts = ['us']
-        language_layout = self._xklwrapper.get_default_language_layout(lang_name)
-        if language_layout and language_layout not in new_layouts:
-            new_layouts.append(language_layout)
+        default_layout = self._xklwrapper.get_default_lang_country_layout(lang_name, country)
+        if default_layout and default_layout not in new_layouts:
+            new_layouts.append(default_layout)
 
         for layout in new_layouts:
             self.data.keyboard.x_layouts.append(layout)
-- 
1.7.11.7



More information about the anaconda-patches mailing list