|
@@ -17,39 +17,19 @@ TOONTOWN_WINDOW_NAME = 'Toontown Rewritten'
|
|
|
|
|
|
if Xlib:
|
|
if Xlib:
|
|
EXTENDED_CONTROLS_DEFAULT_KEYSYM_MAPPINGS = {
|
|
EXTENDED_CONTROLS_DEFAULT_KEYSYM_MAPPINGS = {
|
|
- XK.XK_w: RewriteKeyEventAction(keysym=XK.XK_Up),
|
|
+ XK.XK_w: RewriteKeyEventAction(keysym=XK.XK_Up, target_engine_index=0),
|
|
- XK.XK_a: RewriteKeyEventAction(keysym=XK.XK_Left),
|
|
+ XK.XK_a: RewriteKeyEventAction(keysym=XK.XK_Left, target_engine_index=0),
|
|
- XK.XK_s: RewriteKeyEventAction(keysym=XK.XK_Down),
|
|
+ XK.XK_s: RewriteKeyEventAction(keysym=XK.XK_Down, target_engine_index=0),
|
|
- XK.XK_d: RewriteKeyEventAction(keysym=XK.XK_Right),
|
|
+ XK.XK_d: RewriteKeyEventAction(keysym=XK.XK_Right, target_engine_index=0),
|
|
- XK.XK_v: RewriteKeyEventAction(keysym=XK.XK_Delete),
|
|
+ XK.XK_Control_L: RewriteKeyEventAction(keysym=XK.XK_Control_L, target_engine_index=0),
|
|
- XK.XK_i: RewriteKeyEventAction(
|
|
+ XK.XK_v: RewriteKeyEventAction(keysym=XK.XK_Delete, target_engine_index=0),
|
|
- keysym=XK.XK_Up,
|
|
+ XK.XK_i: RewriteKeyEventAction(keysym=XK.XK_Up, target_engine_index=1),
|
|
- target_engine_index=TargetEngine.NonPrimary,
|
|
+ XK.XK_j: RewriteKeyEventAction(keysym=XK.XK_Left, target_engine_index=1),
|
|
- ),
|
|
+ XK.XK_k: RewriteKeyEventAction(keysym=XK.XK_Down, target_engine_index=1),
|
|
- XK.XK_j: RewriteKeyEventAction(
|
|
+ XK.XK_l: RewriteKeyEventAction(keysym=XK.XK_Right, target_engine_index=1),
|
|
- keysym=XK.XK_Left,
|
|
+ XK.XK_slash: RewriteKeyEventAction(keysym=XK.XK_Control_L, target_engine_index=1),
|
|
- target_engine_index=TargetEngine.NonPrimary,
|
|
+ XK.XK_n: RewriteKeyEventAction(keysym=XK.XK_Delete, target_engine_index=1),
|
|
- ),
|
|
+ XK.XK_space: RewriteKeyEventAction(keysym=XK.XK_Control_L, target_engine_index=TargetEngine.All),
|
|
- XK.XK_k: RewriteKeyEventAction(
|
|
|
|
- keysym=XK.XK_Down,
|
|
|
|
- target_engine_index=TargetEngine.NonPrimary,
|
|
|
|
- ),
|
|
|
|
- XK.XK_l: RewriteKeyEventAction(
|
|
|
|
- keysym=XK.XK_Right,
|
|
|
|
- target_engine_index=TargetEngine.NonPrimary,
|
|
|
|
- ),
|
|
|
|
- XK.XK_slash: RewriteKeyEventAction(
|
|
|
|
- keysym=XK.XK_Control_L,
|
|
|
|
- target_engine_index=TargetEngine.NonPrimary,
|
|
|
|
- ),
|
|
|
|
- XK.XK_n: RewriteKeyEventAction(
|
|
|
|
- keysym=XK.XK_Delete,
|
|
|
|
- target_engine_index=TargetEngine.NonPrimary,
|
|
|
|
- ),
|
|
|
|
- XK.XK_space: RewriteKeyEventAction(
|
|
|
|
- keysym=XK.XK_Control_L,
|
|
|
|
- target_engine_index=TargetEngine.All,
|
|
|
|
- ),
|
|
|
|
XK.XK_e: SelectGagAction(factor_x=0.038, factor_y=-0.047),
|
|
XK.XK_e: SelectGagAction(factor_x=0.038, factor_y=-0.047),
|
|
XK.XK_f: SelectGagAction(factor_x=0.119, factor_y=-0.047),
|
|
XK.XK_f: SelectGagAction(factor_x=0.119, factor_y=-0.047),
|
|
}
|
|
}
|
|
@@ -122,7 +102,7 @@ class ExtendedControls:
|
|
= ToggleExtendedControlsAction()
|
|
= ToggleExtendedControlsAction()
|
|
self._default_action = ForwardKeyEventAction()
|
|
self._default_action = ForwardKeyEventAction()
|
|
self._primary_engine_window = None
|
|
self._primary_engine_window = None
|
|
- self._other_engine_windows = None
|
|
+ self._engine_windows_by_target_index = None
|
|
self._active_key_registry = {}
|
|
self._active_key_registry = {}
|
|
self._enabled = False
|
|
self._enabled = False
|
|
|
|
|
|
@@ -195,7 +175,7 @@ class ExtendedControls:
|
|
)
|
|
)
|
|
self._enabled = True
|
|
self._enabled = True
|
|
|
|
|
|
- self._other_engine_windows = None
|
|
+ self._engine_windows_by_target_index = None
|
|
print("INFO Enabled Extended Controls")
|
|
print("INFO Enabled Extended Controls")
|
|
|
|
|
|
def disable(self):
|
|
def disable(self):
|
|
@@ -232,18 +212,27 @@ class ExtendedControls:
|
|
def _ungrab_key(self, keycode):
|
|
def _ungrab_key(self, keycode):
|
|
self.primary_engine_window.ungrab_key(keycode, X.AnyModifier)
|
|
self.primary_engine_window.ungrab_key(keycode, X.AnyModifier)
|
|
|
|
|
|
- def find_other_engine_windows(self):
|
|
+ def find_engine_windows(self):
|
|
return x_find_window(
|
|
return x_find_window(
|
|
self.xdisplay.screen().root,
|
|
self.xdisplay.screen().root,
|
|
- lambda w: w.get_wm_name() == TOONTOWN_WINDOW_NAME
|
|
+ lambda w: w.get_wm_name() == TOONTOWN_WINDOW_NAME,
|
|
- and w.id != self.primary_engine_window.id,
|
|
|
|
)
|
|
)
|
|
|
|
|
|
@property
|
|
@property
|
|
- def other_engine_windows(self):
|
|
+ def engine_windows_by_target_index(self):
|
|
- if not self._other_engine_windows:
|
|
+ if not self._engine_windows_by_target_index:
|
|
- self._other_engine_windows = self.find_other_engine_windows()
|
|
+ win_by_index = {}
|
|
- return self._other_engine_windows
|
|
+ for target_index, win in enumerate(self.find_engine_windows()):
|
|
|
|
+ print('INFO engine window {} has no target index, assuming {}'.format(win.id, target_index))
|
|
|
|
+ if not target_index in win_by_index:
|
|
|
|
+ win_by_index[target_index] = []
|
|
|
|
+ win_by_index[target_index].append(win)
|
|
|
|
+ self._engine_windows_by_target_index = win_by_index
|
|
|
|
+ return self._engine_windows_by_target_index
|
|
|
|
+
|
|
|
|
+ @property
|
|
|
|
+ def engine_windows(self):
|
|
|
|
+ return [w for g in self.engine_windows_by_target_index.values() for w in g]
|
|
|
|
|
|
def _update_active_key_registry(self, xkeyevent):
|
|
def _update_active_key_registry(self, xkeyevent):
|
|
|
|
|