|
@@ -200,22 +200,36 @@ def wait_for_engine_window(xdisplay, engine_process, timeout_seconds=20, search_
|
|
|
|
|
|
class ExtendedControls:
|
|
class ExtendedControls:
|
|
|
|
|
|
- def __init__(self, xdisplay):
|
|
|
|
- self.xdisplay = xdisplay
|
|
|
|
- self.enabled = False
|
|
|
|
-
|
|
|
|
- def enable(self, engine_window, keyboard_mapping):
|
|
|
|
- for keysym in keyboard_mapping.keys():
|
|
|
|
- x_grab_keysym(self.xdisplay, engine_window, keysym)
|
|
|
|
- self.enabled = True
|
|
|
|
|
|
+ def __init__(self, xdisplay, engine_window, keyboard_mapping, toggle_keysym_name):
|
|
|
|
+ self._xdisplay = xdisplay
|
|
|
|
+ self._engine_window = engine_window
|
|
|
|
+ self._keyboard_mapping = keyboard_mapping
|
|
|
|
+ self._enabled = False
|
|
|
|
+ print("INFO Extended Controls are currently off."
|
|
|
|
+ + " Press key '{}' to enable.".format(toggle_keysym_name))
|
|
|
|
+
|
|
|
|
+ def enable(self):
|
|
|
|
+ for keysym in self._keyboard_mapping.keys():
|
|
|
|
+ x_grab_keysym(self._xdisplay, self._engine_window, keysym)
|
|
|
|
+ self._enabled = True
|
|
print("INFO Enabled Extended Controls")
|
|
print("INFO Enabled Extended Controls")
|
|
|
|
|
|
- def disable(self, engine_window, keyboard_mapping):
|
|
|
|
- for keysym in keyboard_mapping.keys():
|
|
|
|
- x_ungrab_keysym(self.xdisplay, engine_window, keysym)
|
|
|
|
- self.enabled = False
|
|
|
|
|
|
+ def disable(self):
|
|
|
|
+ for keysym in self._keyboard_mapping.keys():
|
|
|
|
+ x_ungrab_keysym(self._xdisplay, self._engine_window, keysym)
|
|
|
|
+ self._enabled = False
|
|
print("INFO Disabled Extended Controls")
|
|
print("INFO Disabled Extended Controls")
|
|
|
|
|
|
|
|
+ @property
|
|
|
|
+ def enabled(self):
|
|
|
|
+ return self._enabled
|
|
|
|
+
|
|
|
|
+ def toggle(self):
|
|
|
|
+ if self.enabled:
|
|
|
|
+ self.disable()
|
|
|
|
+ else:
|
|
|
|
+ self.enable()
|
|
|
|
+
|
|
def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
|
|
def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
|
|
if not Xlib:
|
|
if not Xlib:
|
|
raise Exception('\n'.join([
|
|
raise Exception('\n'.join([
|
|
@@ -226,7 +240,6 @@ def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
|
|
'\t$ pip3 install --user xlib',
|
|
'\t$ pip3 install --user xlib',
|
|
]))
|
|
]))
|
|
xdisplay = Xlib.display.Display()
|
|
xdisplay = Xlib.display.Display()
|
|
- ec = ExtendedControls(xdisplay)
|
|
|
|
engine_window = wait_for_engine_window(xdisplay, engine_process)
|
|
engine_window = wait_for_engine_window(xdisplay, engine_process)
|
|
if not engine_window:
|
|
if not engine_window:
|
|
raise Exception('Could not find the game\'s window.')
|
|
raise Exception('Could not find the game\'s window.')
|
|
@@ -242,8 +255,12 @@ def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
|
|
del keyboard_mapping[toggle_keysym]
|
|
del keyboard_mapping[toggle_keysym]
|
|
print("INFO Extended Controls:"
|
|
print("INFO Extended Controls:"
|
|
+ " Ignoring mapping for toggle key '{}'".format(toggle_keysym_name))
|
|
+ " Ignoring mapping for toggle key '{}'".format(toggle_keysym_name))
|
|
- print("INFO Extended Controls are currently off."
|
|
|
|
- + " Press key '{}' to enable.".format(toggle_keysym_name))
|
|
|
|
|
|
+ ec = ExtendedControls(
|
|
|
|
+ xdisplay,
|
|
|
|
+ engine_window,
|
|
|
|
+ keyboard_mapping,
|
|
|
|
+ toggle_keysym_name,
|
|
|
|
+ )
|
|
while engine_process.poll() is None:
|
|
while engine_process.poll() is None:
|
|
# TODO don't block here, engine might have already been stopped
|
|
# TODO don't block here, engine might have already been stopped
|
|
xevent = xdisplay.next_event()
|
|
xevent = xdisplay.next_event()
|
|
@@ -256,16 +273,7 @@ def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
|
|
)
|
|
)
|
|
if keysym_in == toggle_keysym:
|
|
if keysym_in == toggle_keysym:
|
|
if isinstance(xevent, Xlib.protocol.event.KeyPress):
|
|
if isinstance(xevent, Xlib.protocol.event.KeyPress):
|
|
- if ec.enabled:
|
|
|
|
- ec.disable(
|
|
|
|
- engine_window,
|
|
|
|
- keyboard_mapping,
|
|
|
|
- )
|
|
|
|
- else:
|
|
|
|
- ec.enable(
|
|
|
|
- engine_window,
|
|
|
|
- keyboard_mapping,
|
|
|
|
- )
|
|
|
|
|
|
+ ec.toggle()
|
|
else:
|
|
else:
|
|
if ec.enabled and keysym_in in keyboard_mapping:
|
|
if ec.enabled and keysym_in in keyboard_mapping:
|
|
keysym_out = keyboard_mapping[keysym_in]
|
|
keysym_out = keyboard_mapping[keysym_in]
|