|
@@ -198,17 +198,23 @@ def wait_for_engine_window(xdisplay, engine_process, timeout_seconds=20, search_
|
|
return None
|
|
return None
|
|
|
|
|
|
|
|
|
|
-def _enable_extended_controls(xdisplay, engine_window, keyboard_mapping):
|
|
|
|
- for keysym in keyboard_mapping.keys():
|
|
|
|
- x_grab_keysym(xdisplay, engine_window, keysym)
|
|
|
|
- print("INFO Enabled Extended Controls")
|
|
|
|
|
|
+class ExtendedControls:
|
|
|
|
|
|
|
|
+ def __init__(self, xdisplay):
|
|
|
|
+ self.xdisplay = xdisplay
|
|
|
|
+ self.enabled = False
|
|
|
|
|
|
-def _disable_extended_controls(xdisplay, engine_window, keyboard_mapping):
|
|
|
|
- for keysym in keyboard_mapping.keys():
|
|
|
|
- x_ungrab_keysym(xdisplay, engine_window, keysym)
|
|
|
|
- print("INFO Disabled Extended Controls")
|
|
|
|
|
|
+ def enable(self, engine_window, keyboard_mapping):
|
|
|
|
+ for keysym in keyboard_mapping.keys():
|
|
|
|
+ x_grab_keysym(self.xdisplay, engine_window, keysym)
|
|
|
|
+ self.enabled = True
|
|
|
|
+ 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
|
|
|
|
+ print("INFO Disabled Extended Controls")
|
|
|
|
|
|
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:
|
|
@@ -220,6 +226,7 @@ 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.')
|
|
@@ -237,7 +244,6 @@ def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
|
|
+ " 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."
|
|
print("INFO Extended Controls are currently off."
|
|
+ " Press key '{}' to enable.".format(toggle_keysym_name))
|
|
+ " Press key '{}' to enable.".format(toggle_keysym_name))
|
|
- controls_enabled = False
|
|
|
|
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()
|
|
@@ -250,21 +256,18 @@ 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 controls_enabled:
|
|
|
|
- _disable_extended_controls(
|
|
|
|
- xdisplay,
|
|
|
|
|
|
+ if ec.enabled:
|
|
|
|
+ ec.disable(
|
|
engine_window,
|
|
engine_window,
|
|
keyboard_mapping,
|
|
keyboard_mapping,
|
|
)
|
|
)
|
|
else:
|
|
else:
|
|
- _enable_extended_controls(
|
|
|
|
- xdisplay,
|
|
|
|
|
|
+ ec.enable(
|
|
engine_window,
|
|
engine_window,
|
|
keyboard_mapping,
|
|
keyboard_mapping,
|
|
)
|
|
)
|
|
- controls_enabled = not controls_enabled
|
|
|
|
else:
|
|
else:
|
|
- if controls_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]
|
|
else:
|
|
else:
|
|
keysym_out = keysym_in
|
|
keysym_out = keysym_in
|