def test_get_display_for(self): assert l.get_display_for(self.display) is self.display win = self.window() assert l.get_display_for(win) is self.display assert_raises(TypeError, l.get_display_for, None) widg = gtk.Window() assert l.get_display_for(widg) is self.display clipboard = gtk.Clipboard(self.display, "PRIMARY") assert l.get_display_for(clipboard) is self.display
def __init__(self, window): gobject.GObject.__init__(self) self.window = window self.hotkeys = {} disp = get_display_for(self.window) self.keymap = gtk.gdk.keymap_get_for_display(disp) self.keymap_id = self.keymap.connect("keys-changed", self._keys_changed) self._keys_changed() add_event_receiver(self.window, self)
def grok_modifier_map(display_source): """Return an dict mapping modifier names to corresponding X modifier bitmasks.""" modifier_map = { "shift": 1 << 0, "lock": 1 << 1, "control": 1 << 2, "mod1": 1 << 3, "mod2": 1 << 4, "mod3": 1 << 5, "mod4": 1 << 6, "mod5": 1 << 7, "scroll": 0, "num": 0, "meta": 0, "super": 0, "hyper": 0, "alt": 0, } meanings = { "Scroll_Lock": "scroll", "Num_Lock": "num", "Meta_L": "meta", "Meta_R": "meta", "Super_L": "super", "Super_R": "super", "Hyper_L": "hyper", "Hyper_R": "hyper", "Alt_L": "alt", "Alt_R": "alt", } disp = get_display_for(display_source) (max_keypermod, keycodes) = get_modifier_map(disp) assert len(keycodes) == 8 * max_keypermod keymap = gtk.gdk.keymap_get_for_display(disp) for i in range(8): for j in range(max_keypermod): keycode = keycodes[i * max_keypermod + j] if keycode: entries = keymap.get_entries_for_keycode(keycode) if entries is None: # This keycode has no entry in the keymap: continue for (keyval, _, _, _) in entries: keyval_name = gtk.gdk.keyval_name(keyval) if keyval_name in meanings: modifier_map[meanings[keyval_name]] |= (1 << i) modifier_map["nuisance"] = (modifier_map["lock"] | modifier_map["scroll"] | modifier_map["num"]) return modifier_map
def grok_modifier_map(display_source, meanings): """Return an dict mapping modifier names to corresponding X modifier bitmasks.""" modifier_map = { "shift": 1 << 0, "lock": 1 << 1, "control": 1 << 2, "mod1": 1 << 3, "mod2": 1 << 4, "mod3": 1 << 5, "mod4": 1 << 6, "mod5": 1 << 7, "scroll": 0, "num": 0, "meta": 0, "super": 0, "hyper": 0, "alt": 0, } if not meanings: meanings = DEFAULT_MODIFIER_MEANINGS disp = get_display_for(display_source) (max_keypermod, keycodes) = get_modifier_map(disp) assert len(keycodes) == 8 * max_keypermod keymap = gtk.gdk.keymap_get_for_display(disp) for i in range(8): for j in range(max_keypermod): keycode = keycodes[i * max_keypermod + j] if keycode: entries = keymap.get_entries_for_keycode(keycode) if entries is None: # This keycode has no entry in the keymap: continue for (keyval, _, _, _) in entries: keyval_name = gtk.gdk.keyval_name(keyval) modifier = meanings.get(keyval_name) if modifier: modifier_map[modifier] |= (1 << i) modifier_map["nuisance"] = (modifier_map["lock"] | modifier_map["scroll"] | modifier_map["num"]) log.debug("grok_modifier_map(%s,%s)=%s" % (display_source, meanings, modifier_map)) return modifier_map