[PATCH 2/3] Fixes for the XklWrapper (#895766)

Vratislav Podzimek vpodzime at redhat.com
Mon Feb 11 14:05:18 UTC 2013


Xkl.ConfigRec is just a snapshot of X server's configuration so it should be
refreshed before we read it (add_layout and remove_layout methods).

XklEngine.get_current_state().group may be out of range of defined groups
(layouts) if the last group (layout) is removed while being activated.

Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
---
 pyanaconda/keyboard.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/pyanaconda/keyboard.py b/pyanaconda/keyboard.py
index fc4914a..1a614b4 100755
--- a/pyanaconda/keyboard.py
+++ b/pyanaconda/keyboard.py
@@ -509,7 +509,12 @@ class XklWrapper(object):
         groups_names = self._engine.get_groups_names()
         self._engine.stop_listen(Xkl.EngineListenModes.TRACK_KEYBOARD_STATE)
 
-        return groups_names[state.group]
+        #BUG?: state.group may be out of range of groups_names if the last
+        #      layout in the list was removed while being activated
+        if state.group < len(groups_names):
+            return groups_names[state.group]
+        else:
+            return groups_names[-1]
 
     def activate_default_layout(self):
         """
@@ -539,6 +544,9 @@ class XklWrapper(object):
 
         """
 
+        #update self._rec which is just a snapshot of X server's configuration
+        self._rec.get_from_server(self._engine)
+
         #we can get 'layout' or 'layout (variant)'
         (layout, variant) = _parse_layout_variant(layout)
 
@@ -565,6 +573,9 @@ class XklWrapper(object):
 
         """
 
+        #update self._rec which is just a snapshot of X server's configuration
+        self._rec.get_from_server(self._engine)
+
         #we can get 'layout' or 'layout (variant)'
         (layout, variant) = _parse_layout_variant(layout)
 
-- 
1.7.11.7



More information about the anaconda-patches mailing list