Kaynağa Gözat

scripts/tooncher & extended controls: added option to change engine's window name

Fabian Peter Hammerle 6 yıl önce
ebeveyn
işleme
1440367b8d
3 değiştirilmiş dosya ile 33 ekleme ve 4 silme
  1. 12 1
      scripts/tooncher
  2. 7 1
      tooncher/__init__.py
  3. 14 2
      tooncher/controls.py

+ 12 - 1
scripts/tooncher

@@ -10,7 +10,8 @@ import yaml
 
 def run(username, config_path, engine_path=None, validate_ssl_certs=True,
         cpu_limit_percent=None, enable_extended_keyboard_controls=False,
-        extended_keyboard_control_toggle_keysym_name=None):
+        extended_keyboard_control_toggle_keysym_name=None,
+        engine_window_name=None):
 
     if os.path.exists(config_path):
         with open(config_path) as f:
@@ -36,6 +37,7 @@ def run(username, config_path, engine_path=None, validate_ssl_certs=True,
                 cpu_limit_percent=cpu_limit_percent,
                 enable_extended_keyboard_controls=enable_extended_keyboard_controls,
                 extended_keyboard_control_toggle_keysym_name=extended_keyboard_control_toggle_keysym_name,
+                engine_window_name=engine_window_name,
             )
 
 
@@ -97,6 +99,15 @@ def _init_argparser():
             + ' (see XStringToKeysym & X11/keysymdef.h, '
             + ' default: %(default)s)',
     )
+    argparser.add_argument(
+        '--change-window-name',
+        metavar='ENGINE_WINDOW_NAME',
+        dest='engine_window_name',
+        default=None,
+        help='Change window name of engine after launch.'
+            + ' This requires Extended Controls to be enabled.'
+            + ' (default: no change)',
+    )
     return argparser
 
 

+ 7 - 1
tooncher/__init__.py

@@ -125,7 +125,12 @@ def login(username=None, password=None,
 
 def launch(engine_path, username, password, validate_ssl_certs=True,
            cpu_limit_percent=None, enable_extended_keyboard_controls=False,
-           extended_keyboard_control_toggle_keysym_name=None):
+           extended_keyboard_control_toggle_keysym_name=None,
+           engine_window_name=None):
+    if engine_window_name and not enable_extended_keyboard_controls:
+        raise Exception(
+            "Enable Extended Controls to change engine's window name",
+        )
     result = login(
         username=username,
         password=password,
@@ -153,6 +158,7 @@ def launch(engine_path, username, password, validate_ssl_certs=True,
             try:
                 tooncher.controls.ExtendedControls(
                     primary_engine_pid=p.pid,
+                    primary_engine_window_name=engine_window_name,
                     toggle_keysym_name=extended_keyboard_control_toggle_keysym_name,
                 ).run()
             except Exception as e:

+ 14 - 2
tooncher/controls.py

@@ -72,7 +72,7 @@ def x_wait_for_event(xdisplay, timeout_seconds):
 
 class ExtendedControls:
 
-    def __init__(self, primary_engine_pid,
+    def __init__(self, primary_engine_pid, primary_engine_window_name=None,
                  toggle_keysym_name=EXTENDED_CONTROLS_DEFAULT_TOGGLE_KEYSYM_NAME):
         if not psutil:
             raise Exception('\n'.join([
@@ -91,6 +91,7 @@ class ExtendedControls:
                 '\t$ pip3 install --user xlib',
             ]))
         self._primary_engine_pid = primary_engine_pid
+        self._primary_engine_window_name = primary_engine_window_name
         self._xdisplay = Xlib.display.Display()
         self._toggle_keysym = XK.string_to_keysym(toggle_keysym_name)
         if self._toggle_keysym == X.NoSymbol:
@@ -149,6 +150,13 @@ class ExtendedControls:
             data=[os.getpid()],
             mode=X.PropModeReplace,
         )
+        if self._primary_engine_window_name:
+            self._primary_engine_window.set_wm_name(
+                self._primary_engine_window_name,
+            )
+            print("INFO Changed engine's window name to {!r}".format(
+                self._primary_engine_window_name,
+            ))
         if not self.enabled:
             keysym_name = XK.keysym_to_string(self._toggle_keysym)
             print("INFO Extended Controls are currently disabled."
@@ -224,9 +232,13 @@ class ExtendedControls:
         self.primary_engine_window.ungrab_key(keycode, X.AnyModifier)
 
     def find_engine_windows(self):
+        controls_xprop = self.xdisplay.intern_atom(
+            EXTENDED_CONTROLS_PID_XPROPERTY_NAME,
+        )
         return x_find_window(
             self.xdisplay.screen().root,
-            lambda w: w.get_wm_name() == TOONTOWN_WINDOW_NAME,
+            lambda w: w.get_wm_name() == TOONTOWN_WINDOW_NAME
+                or w.get_full_property(controls_xprop, X.AnyPropertyType),
         )
 
     @property