|
@@ -33,6 +33,7 @@ from rescriptoon._actions import (
|
|
ToggleOverlayAction,
|
|
ToggleOverlayAction,
|
|
)
|
|
)
|
|
from rescriptoon._keys import keysym_to_label
|
|
from rescriptoon._keys import keysym_to_label
|
|
|
|
+from rescriptoon._ui import SystemTrayUnavailable, TrayIcon
|
|
|
|
|
|
_TOONTOWN_ENGINE_WINDOW_NAME = "Toontown Rewritten"
|
|
_TOONTOWN_ENGINE_WINDOW_NAME = "Toontown Rewritten"
|
|
|
|
|
|
@@ -110,6 +111,10 @@ class Overlay:
|
|
self._active_key_registry = {}
|
|
self._active_key_registry = {}
|
|
self._enabled = False
|
|
self._enabled = False
|
|
self._engine_windows = None
|
|
self._engine_windows = None
|
|
|
|
+ try:
|
|
|
|
+ self._tray_icon = TrayIcon(display=self._xdisplay)
|
|
|
|
+ except SystemTrayUnavailable:
|
|
|
|
+ self._tray_icon = None
|
|
|
|
|
|
@property
|
|
@property
|
|
def xdisplay(self) -> Xlib.display.Display:
|
|
def xdisplay(self) -> Xlib.display.Display:
|
|
@@ -148,11 +153,17 @@ class Overlay:
|
|
_x_wait_for_event(self.xdisplay, timeout_seconds=0.05)
|
|
_x_wait_for_event(self.xdisplay, timeout_seconds=0.05)
|
|
self._disable()
|
|
self._disable()
|
|
|
|
|
|
|
|
+ def _draw_tray_icon(self) -> None:
|
|
|
|
+ if self._tray_icon:
|
|
|
|
+ self._tray_icon.draw(self.enabled)
|
|
|
|
+
|
|
def _handle_xevent(self, xevent: Xlib.protocol.rq.Event) -> None:
|
|
def _handle_xevent(self, xevent: Xlib.protocol.rq.Event) -> None:
|
|
if isinstance(
|
|
if isinstance(
|
|
xevent, (Xlib.protocol.event.KeyPress, Xlib.protocol.event.KeyRelease)
|
|
xevent, (Xlib.protocol.event.KeyPress, Xlib.protocol.event.KeyRelease)
|
|
):
|
|
):
|
|
self._handle_xkeyevent(xevent)
|
|
self._handle_xkeyevent(xevent)
|
|
|
|
+ elif self._tray_icon and xevent.type == Xlib.X.ConfigureNotify:
|
|
|
|
+ self._draw_tray_icon()
|
|
|
|
|
|
def _handle_xkeyevent(
|
|
def _handle_xkeyevent(
|
|
self,
|
|
self,
|
|
@@ -178,6 +189,7 @@ class Overlay:
|
|
if keysym != self._toggle_keysym:
|
|
if keysym != self._toggle_keysym:
|
|
self._grab_key(self.xdisplay.keysym_to_keycode(keysym),)
|
|
self._grab_key(self.xdisplay.keysym_to_keycode(keysym),)
|
|
self._enabled = True
|
|
self._enabled = True
|
|
|
|
+ self._draw_tray_icon()
|
|
logging.info(
|
|
logging.info(
|
|
"rescriptoon is now enabled. press %s to disable.",
|
|
"rescriptoon is now enabled. press %s to disable.",
|
|
self._toggle_keysym_name,
|
|
self._toggle_keysym_name,
|
|
@@ -188,6 +200,7 @@ class Overlay:
|
|
if keysym != self._toggle_keysym:
|
|
if keysym != self._toggle_keysym:
|
|
self._ungrab_key(self.xdisplay.keysym_to_keycode(keysym),)
|
|
self._ungrab_key(self.xdisplay.keysym_to_keycode(keysym),)
|
|
self._enabled = False
|
|
self._enabled = False
|
|
|
|
+ self._draw_tray_icon()
|
|
|
|
|
|
def disable(self) -> None:
|
|
def disable(self) -> None:
|
|
self._disable()
|
|
self._disable()
|