try: import Xlib.protocol.event except ImportError: pass class RewriteKeyEventAction: def __init__(self, keysym=None): self._keysym = keysym def execute(self, extended_controls, xkeyevent): attr = dict( window=extended_controls.engine_window, detail=xkeyevent.detail, state=xkeyevent.state, root_x=xkeyevent.root_x, root_y=xkeyevent.root_y, event_x=xkeyevent.event_x, event_y=xkeyevent.event_y, child=xkeyevent.child, root=xkeyevent.root, time=xkeyevent.time, # X.CurrentTime same_screen=xkeyevent.same_screen, ) if self._keysym: attr['detail'] = extended_controls.xdisplay.keysym_to_keycode( self._keysym) extended_controls.engine_window.send_event( type(xkeyevent)(**attr), ) class ForwardKeyEventAction(RewriteKeyEventAction): def __init__(self): super().__init__(keysym=None) class ToggleExtendedControlsAction: def execute(self, extended_controls, xkeyevent): if isinstance(xkeyevent, Xlib.protocol.event.KeyPress): extended_controls.toggle()