def regrab(changes): global __grabbed, __events cmodkeys = [] for wid, modifiers, keycode, button in __grabbed: if keycode in changes: cmodkeys.append((wid, modifiers, keycode, button)) keysym.ungrab_key(state.conn, wid, modifiers, keycode) keysym.grab_key(state.conn, wid, modifiers, changes[keycode]) old = (modifiers, keycode, button) new = (modifiers, changes[keycode], button) for xevent in __events: for wid in __events[xevent]: if old in __events[xevent][wid]: __events[xevent][wid][new] = __events[xevent][wid][old] del __events[xevent][wid][old] for wid, modifiers, keycode, button in cmodkeys: old = (wid, modifiers, keycode, button) new = (wid, modifiers, changes[keycode], button) __grabbed[new] = __grabbed[old] del __grabbed[old]
def __register_key(xevent, callback, wid, key_string): global __grabbed modifiers, keycode = __parse_keystring(key_string) modkey = (wid, modifiers, keycode, None) # If there's no valid key code, then there's no reason to register # an event callback... if not keycode: return False if (not __grabbed[modkey] and not keysym.grab_key(state.conn, wid, modifiers, keycode)): return False __grabbed[modkey] += 1 return register_callback(xevent, callback, wid, modifiers, keycode, None)