diff --git a/src/services/modus.py b/src/services/modus.py index 536da1f..54649c8 100644 --- a/src/services/modus.py +++ b/src/services/modus.py @@ -100,6 +100,9 @@ class ModusService(Service): @Signal def show_notificationcenter_changed(self, value: bool) -> None: ... + @Signal + def fullscreen_changed(self, value: bool) -> None: ... + @Signal def notification_count_changed(self, value: int) -> None: ... @@ -167,6 +170,16 @@ class ModusService(Service): def show_notificationcenter(self) -> bool: return self._show_notificationcenter + @Property(bool, flags="read-write", default_value=False) + def fullscreen(self) -> bool: + return self._fullscreen + + @fullscreen.setter + def fullscreen(self, value: bool): + if value != self._fullscreen: + self._fullscreen = value + self.fullscreen_changed(value) + @current_active_app_name.setter def current_active_app_name(self, value: str): if value != self._current_active_app_name: @@ -294,6 +307,7 @@ class ModusService(Service): self._show_notificationcenter = False self._dock_width = 0 self._dock_height = 0 + self._fullscreen = False @property def notification_count(self) -> int: @@ -327,6 +341,7 @@ def _setup_workspace_monitoring(): active_workspace = json.loads(workspace_data.decode("utf-8"))["name"] service._current_workspace = str(active_workspace) _hyprland_connection.connect("event::workspace", _on_workspace_changed) + _hyprland_connection.connect("event::fullscreen", _on_fullscreen_changed) except Exception as e: logger.error(f"[ModusService] Failed to setup workspace monitoring: {e}") service._current_workspace = "1" @@ -378,6 +393,16 @@ def _on_workspace_changed(obj, signal): logger.error(f"[ModusService] Error processing workspace change: {e}") +def _on_fullscreen_changed(obj, event): + service = get_modus_service() + try: + data = event.data[0] if event.data else "" + mode = data.split(":")[-1] if ":" in data else "0" + service.fullscreen = mode in ("1", "2") + except Exception as e: + logger.error(f"[ModusService] Error processing fullscreen change: {e}") + + def remove_notification(id: int): get_notification_service().remove_cached_notification(id) get_modus_service().notification_count_changed(get_notification_service().count)