def update_modifier_map(self, display, xkbmap_mod_meanings): try: from xpra.x11.gtk_x11.keys import grok_modifier_map self.modifier_map = grok_modifier_map(display, xkbmap_mod_meanings) except ImportError: self.modifier_map = MODIFIER_MAP log.debug("update_modifier_map(%s, %s) modifier_map=%s", display, xkbmap_mod_meanings, self.modifier_map)
def update_modifier_map(self, display, xkbmap_mod_meanings): try: from xpra.x11.gtk_x11.keys import grok_modifier_map self.modifier_map = grok_modifier_map(display, xkbmap_mod_meanings) except ImportError: self.modifier_map = MODIFIER_MAP try: dn = "%s %s" % (type(display).__name__, display.get_name()) except Exception as e: dn = str(display) log("update_modifier_map(%s, %s) modifier_map=%s", dn, xkbmap_mod_meanings, self.modifier_map)
def update_modifier_map(self, display, xkbmap_mod_meanings): try: from xpra.x11.gtk_x11.keys import grok_modifier_map self.modifier_map = grok_modifier_map(display, xkbmap_mod_meanings) except ImportError: self.modifier_map = MODIFIER_MAP try: dn = "%s %s" % (type(display).__name__, display.get_name()) except: dn = str(display) log("update_modifier_map(%s, %s) modifier_map=%s", dn, xkbmap_mod_meanings, self.modifier_map)
def update_modifier_map(self, display, xkbmap_mod_meanings): try: from xpra.x11.gtk_x11.keys import grok_modifier_map self.modifier_map = grok_modifier_map(display, xkbmap_mod_meanings) except ImportError: self.modifier_map = MODIFIER_MAP #force re-query on next call: self.keymap_modifiers = None try: dn = "%s %s" % (type(display).__name__, display.get_name()) except: dn = str(display) log("update_modifier_map(%s, %s) modifier_map=%s", dn, xkbmap_mod_meanings, self.modifier_map)
def test_grok_modifier_map(self): self.clear_xmodmap() mm = keys.grok_modifier_map(self.display) print(mm) assert mm == { "shift": 1, "lock": 2, "control": 4, "mod1": 8, "mod2": 16, "mod3": 32, "mod4": 64, "mod5": 128, "scroll": 0, "num": 0, "meta": 0, "super": 0, "hyper": 0, "alt": 0, "nuisance": 2 } self.xmodmap("""add Mod1 = Num_Lock Hyper_L add Mod2 = Hyper_R Meta_L Alt_L add Mod3 = Super_R add Mod4 = Alt_R Meta_R Super_L add Mod5 = Scroll_Lock Super_R """) mm = keys.grok_modifier_map(self.display) print(mm) assert mm["scroll"] == 128 assert mm["num"] == 8 assert mm["meta"] == 16 | 64 assert mm["super"] == 32 | 64 | 128 assert mm["hyper"] == 8 | 16 assert mm["alt"] == 16 | 64 assert mm["nuisance"] == 2 | 8 | 128
def test_parse_unparse_keys(self): self.clear_xmodmap() self.xmodmap("""add Mod1 = Meta_L Meta_R Alt_L !add Mod2 = add Mod3 = Super_L Super_R !add Mod4 = add Mod5 = Scroll_Lock keycode 240 = p P """) gtk.gdk.flush() mm = keys.grok_modifier_map(self.display) keymap = gtk.gdk.keymap_get_for_display(self.display) o_keyval = gtk.gdk.keyval_from_name("o") o_keycode = keymap.get_entries_for_keyval(o_keyval)[0][0] assert parse_key("o", keymap, mm) == (0, [o_keycode]) assert parse_key("O", keymap, mm) == (0, [o_keycode]) assert parse_key("<alt>O", keymap, mm) == (8, [o_keycode]) assert parse_key("<ALT>O", keymap, mm) == (8, [o_keycode]) assert parse_key("<meTa>O", keymap, mm) == (8, [o_keycode]) assert parse_key("<meTa><mod5>O", keymap, mm) == (8, [o_keycode]) assert parse_key("<mod2>O", keymap, mm) == (16, [o_keycode]) assert (parse_key("<mod4><mod3><MOD1><mod3>O", keymap, mm) == (8 | 32 | 64, [o_keycode])) p_keyval = gtk.gdk.keyval_from_name("p") p_keycodes = [ entry[0] for entry in keymap.get_entries_for_keyval(p_keyval) ] assert len(p_keycodes) > 1 assert parse_key("P", keymap, mm) == (0, p_keycodes) assert parse_key("<alt>p", keymap, mm) == (8, p_keycodes) assert unparse_key(0, o_keycode, keymap, mm) == "o" assert unparse_key(8, o_keycode, keymap, mm) == "<alt>o" assert unparse_key(16, o_keycode, keymap, mm) == "<mod2>o" assert unparse_key(32, o_keycode, keymap, mm) == "<super>o" assert (unparse_key(16 | 32, o_keycode, keymap, mm) == "<mod2><super>o") assert (unparse_key(8 | 32, o_keycode, keymap, mm) == "<super><alt>o") assert (unparse_key(1 | 2 | 4, o_keycode, keymap, mm) == "<shift><control>o")
def compute_modifier_map(self): self.modifier_map = grok_modifier_map(gtk.gdk.display_get_default(), self.xkbmap_mod_meanings) log("modifier_map(%s)=%s", self.xkbmap_mod_meanings, self.modifier_map)
def test_grok_modifier_map(self): from xpra.x11.gtk_x11.keys import grok_modifier_map from gi.repository.Gdk import Display display = Display.get_default() grok_modifier_map(display, None) grok_modifier_map(display, {})