From 9cd9d4fdbf7f90227a19b7ae180168078e0805db Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 2 Oct 2017 07:27:51 +0000 Subject: [PATCH] * make sure we always compute the nuisance modifiers - even when using an untranslated keymap * "lock" is always one of them git-svn-id: https://xpra.org/svn/Xpra/trunk@17026 3bb7dfac-3a0b-4e04-842a-767bc560f471 --- src/xpra/x11/server_keyboard_config.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/xpra/x11/server_keyboard_config.py b/src/xpra/x11/server_keyboard_config.py index d780160af5..0c4a8e3fde 100644 --- a/src/xpra/x11/server_keyboard_config.py +++ b/src/xpra/x11/server_keyboard_config.py @@ -164,11 +164,14 @@ def hashadd(v): def compute_modifier_keynames(self): self.keycodes_for_modifier_keynames = {} + self.xkbmap_mod_nuisance = set(DEFAULT_MODIFIER_NUISANCE) keymap = get_default_keymap() gdk = import_gdk() if self.keynames_for_mod: for modifier, keynames in self.keynames_for_mod.items(): for keyname in keynames: + if keyname in DEFAULT_MODIFIER_NUISANCE_KEYNAMES: + self.xkbmap_mod_nuisance.add(modifier) keyval = gdk.keyval_from_name(keyname) if keyval==0: log.error("no keyval found for keyname %s (modifier %s)", keyname, modifier) @@ -197,7 +200,7 @@ def compute_client_modifier_keycodes(self): for k,v in self.keycode_translation.items(): reverse_trans[v] = k self.modifier_client_keycodes = {} - self.xkbmap_mod_nuisance = set() + self.xkbmap_mod_nuisance = set(DEFAULT_MODIFIER_NUISANCE) for modifier, keys in server_mappings.items(): #ie: modifier=mod3, keys=[(115, 'Super_L'), (116, 'Super_R'), (127, 'Super_L')] #if self.is_native_keymap: @@ -222,7 +225,7 @@ def compute_client_modifier_keycodes(self): log("compute_client_modifier_keycodes() mappings=%s", self.modifier_client_keycodes) log("compute_client_modifier_keycodes() mod nuisance=%s", self.xkbmap_mod_nuisance) except Exception as e: - log.error("do_set_keymap: %s" % e, exc_info=True) + log.error("Error: compute_client_modifier_keycodes: %s" % e, exc_info=True) def compute_modifier_map(self): self.modifier_map = grok_modifier_map(display_get_default(), self.xkbmap_mod_meanings) @@ -472,7 +475,7 @@ def change_mask(modifiers, press, info): #nuisance keys (lock, num, scroll) are toggled by a #full key press + key release (so act accordingly in the loop below) nuisance = modifier in self.xkbmap_mod_nuisance - log("keynames(%s)=%s, keycodes=%s, nuisance=%s", modifier, keynames, keycodes, nuisance) + log("keynames(%s)=%s, keycodes=%s, nuisance=%s, nuisance keys=%s", modifier, keynames, keycodes, nuisance, self.xkbmap_mod_nuisance) modkeycode = None if not press: #since we want to unpress something,