|
@@ -1,5 +1,6 @@
|
|
import copy
|
|
import copy
|
|
import time
|
|
import time
|
|
|
|
+from tooncher.actions import *
|
|
try:
|
|
try:
|
|
import psutil
|
|
import psutil
|
|
except ImportError:
|
|
except ImportError:
|
|
@@ -80,6 +81,14 @@ class ExtendedControls:
|
|
def engine_running(self):
|
|
def engine_running(self):
|
|
return psutil.pid_exists(self._engine_pid)
|
|
return psutil.pid_exists(self._engine_pid)
|
|
|
|
|
|
|
|
+ @property
|
|
|
|
+ def xdisplay(self):
|
|
|
|
+ return self._xdisplay
|
|
|
|
+
|
|
|
|
+ @property
|
|
|
|
+ def engine_window(self):
|
|
|
|
+ return self._engine_window
|
|
|
|
+
|
|
def _wait_for_engine_window(self, timeout_seconds=20, search_interval_seconds=2):
|
|
def _wait_for_engine_window(self, timeout_seconds=20, search_interval_seconds=2):
|
|
start_epoch = time.time()
|
|
start_epoch = time.time()
|
|
while self.engine_running and (time.time() - start_epoch) <= timeout_seconds:
|
|
while self.engine_running and (time.time() - start_epoch) <= timeout_seconds:
|
|
@@ -115,32 +124,19 @@ class ExtendedControls:
|
|
self._handle_xkeyevent(xevent)
|
|
self._handle_xkeyevent(xevent)
|
|
|
|
|
|
def _handle_xkeyevent(self, xkeyevent):
|
|
def _handle_xkeyevent(self, xkeyevent):
|
|
- # TODO map keycodes instead of keysyms
|
|
|
|
keysym_in = self._xdisplay.keycode_to_keysym(
|
|
keysym_in = self._xdisplay.keycode_to_keysym(
|
|
xkeyevent.detail,
|
|
xkeyevent.detail,
|
|
index=0,
|
|
index=0,
|
|
)
|
|
)
|
|
if keysym_in == self._toggle_keysym:
|
|
if keysym_in == self._toggle_keysym:
|
|
- if isinstance(xkeyevent, Xlib.protocol.event.KeyPress):
|
|
|
|
- self.toggle()
|
|
|
|
|
|
+ action = ToggleExtendedControlsAction()
|
|
|
|
+ elif self.enabled and keysym_in in self._keysym_mappings:
|
|
|
|
+ action = RewriteKeyEventAction(
|
|
|
|
+ keysym=self._keysym_mappings[keysym_in],
|
|
|
|
+ )
|
|
else:
|
|
else:
|
|
- if self.enabled and keysym_in in self._keysym_mappings:
|
|
|
|
- keysym_out = self._keysym_mappings[keysym_in]
|
|
|
|
- else:
|
|
|
|
- keysym_out = keysym_in
|
|
|
|
- self._engine_window.send_event(type(xkeyevent)(
|
|
|
|
- window=self._engine_window,
|
|
|
|
- detail=self._xdisplay.keysym_to_keycode(keysym_out),
|
|
|
|
- state=0,
|
|
|
|
- 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,
|
|
|
|
- ))
|
|
|
|
|
|
+ action = ForwardKeyEventAction()
|
|
|
|
+ action.execute(self, xkeyevent)
|
|
|
|
|
|
def enable(self):
|
|
def enable(self):
|
|
for keysym in self._keysym_mappings.keys():
|
|
for keysym in self._keysym_mappings.keys():
|