|
@@ -1,4 +1,5 @@
|
|
|
import copy
|
|
|
+import select
|
|
|
import time
|
|
|
from tooncher.actions import *
|
|
|
try:
|
|
@@ -40,6 +41,19 @@ def x_find_window_by_pid(display, pid):
|
|
|
return x_find_window(display.screen().root, filter_callback)
|
|
|
|
|
|
|
|
|
+def x_wait_for_event(xdisplay, timeout_seconds):
|
|
|
+ """ Wait up to `timeout_seconds` seconds for a xevent.
|
|
|
+ Return True, if a xevent is available.
|
|
|
+ Return False, if the timeout was reached. """
|
|
|
+ rlist = select.select(
|
|
|
+ [xdisplay.display.socket],
|
|
|
+ [],
|
|
|
+ [],
|
|
|
+ timeout_seconds,
|
|
|
+ )[0]
|
|
|
+ return len(rlist) > 0
|
|
|
+
|
|
|
+
|
|
|
class ExtendedControls:
|
|
|
|
|
|
def __init__(self, engine_pid,
|
|
@@ -72,7 +86,8 @@ class ExtendedControls:
|
|
|
if self._toggle_keysym in self._keysym_mappings:
|
|
|
print("INFO Extended Controls:"
|
|
|
+ " Ignoring mapping for toggle key '{}'".format(toggle_keysym_name))
|
|
|
- self._keysym_mappings[self._toggle_keysym] = ToggleExtendedControlsAction()
|
|
|
+ self._keysym_mappings[self._toggle_keysym] \
|
|
|
+ = ToggleExtendedControlsAction()
|
|
|
self._default_action = ForwardKeyEventAction()
|
|
|
self._engine_window = None
|
|
|
self._enabled = False
|
|
@@ -114,8 +129,9 @@ class ExtendedControls:
|
|
|
print("INFO Extended Controls are currently disabled."
|
|
|
+ " Press key '{}' to enable.".format(keysym_name))
|
|
|
while self.engine_running:
|
|
|
-
|
|
|
- self._handle_xevent(self._xdisplay.next_event())
|
|
|
+ while self.xdisplay.pending_events():
|
|
|
+ self._handle_xevent(self._xdisplay.next_event())
|
|
|
+ x_wait_for_event(self.xdisplay, timeout_seconds=1)
|
|
|
|
|
|
def _handle_xevent(self, xevent):
|
|
|
|