|
@@ -39,27 +39,48 @@ class SelectGagAction:
|
|
|
extended_controls.engine_window.send_event(e)
|
|
|
|
|
|
|
|
|
+class TargetEngine:
|
|
|
+ Primary = 1 << 0
|
|
|
+ Others = 1 << 1
|
|
|
+ All = Primary | Others
|
|
|
+
|
|
|
+
|
|
|
class RewriteKeyEventAction:
|
|
|
|
|
|
- def __init__(self, keysym=None):
|
|
|
+ def __init__(self, keysym=None, target_engine=TargetEngine.Primary):
|
|
|
self._keysym = keysym
|
|
|
+ self._target_engine = target_engine
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def _send_event(event_template, keycode, target_window):
|
|
|
+ target_window.send_event(type(event_template)(
|
|
|
+ window=target_window,
|
|
|
+ detail=keycode,
|
|
|
+ state=event_template.state,
|
|
|
+ root_x=event_template.root_x,
|
|
|
+ root_y=event_template.root_y,
|
|
|
+ event_x=event_template.event_x,
|
|
|
+ event_y=event_template.event_y,
|
|
|
+ child=event_template.child,
|
|
|
+ root=event_template.root,
|
|
|
+ time=event_template.time, # X.CurrentTime
|
|
|
+ same_screen=event_template.same_screen,
|
|
|
+ ))
|
|
|
|
|
|
def execute(self, extended_controls, xkeyevent):
|
|
|
- ev = type(xkeyevent)(
|
|
|
- window=extended_controls.engine_window,
|
|
|
- detail=extended_controls.xdisplay.keysym_to_keycode(self._keysym)
|
|
|
+ defaults = dict(
|
|
|
+ keycode=extended_controls.xdisplay.keysym_to_keycode(self._keysym)
|
|
|
if self._keysym else 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,
|
|
|
+ event_template=xkeyevent,
|
|
|
)
|
|
|
- extended_controls.engine_window.send_event(ev)
|
|
|
+ if self._target_engine & TargetEngine.Primary:
|
|
|
+ self._send_event(
|
|
|
+ target_window=extended_controls.engine_window,
|
|
|
+ **defaults,
|
|
|
+ )
|
|
|
+ if self._target_engine & TargetEngine.Others:
|
|
|
+ for win in extended_controls.find_other_engine_windows():
|
|
|
+ self._send_event(target_window=win, **defaults)
|
|
|
|
|
|
|
|
|
class ForwardKeyEventAction(RewriteKeyEventAction):
|