Added notifiaction icon

This commit is contained in:
tr1x_em committed 2025-08-11 15:57:21 +05:30
1 parent d0189d44b4
commit d8735cc64e
1 file changed
+45
+45
View File
@@ -20,6 +20,7 @@ from modules.panel.components.workspace import WorkspaceIndicator
from utils.roam import modus_service
from widgets.mousecapture import MouseCapture
from widgets.wayland import WaylandWindow as Window
from services.modus import notification_service
# Apply enhanced system tray icon handling
apply_enhanced_system_tray()
@@ -125,6 +126,20 @@ class Panel(Window):
layer="overlay", child_window=NotificationCenter()
)
# Notification Center Icon
self.notification_icon = Svg(
size=22,
svg_file=get_relative_path(
"../../config/assets/icons/notifications/notification-inactive.svg"
),
)
self.notification_center_icon_button = Button(
name="notification-center-icon-button",
child=self.notification_icon,
on_clicked=self.notification_center.toggle_mousecapture,
)
# Clickable DateTime for notification center
self.datetime_button = Button(
name="datetime-button",
@@ -163,6 +178,7 @@ class Panel(Window):
self.search,
self.control_center_button,
self.datetime_button,
self.notification_center_icon_button,
],
),
)
@@ -172,6 +188,12 @@ class Panel(Window):
# Set initial DND state
self.update_dnd_indicator(modus_service.dont_disturb)
# Connect to notification service for icon state updates
notification_service.connect("notify::count", self.on_notification_count_changed)
# Set initial notification icon state
self.update_notification_icon()
return self.show_all()
def search_apps(self):
@@ -193,6 +215,7 @@ class Panel(Window):
def on_dnd_changed(self, _, dnd_state):
"""Handle DND state changes from the service."""
self.update_dnd_indicator(dnd_state)
self.update_notification_icon() # Also update notification icon when DND changes
def update_dnd_indicator(self, dnd_enabled):
"""Update the DND indicator opacity based on DND state."""
@@ -202,3 +225,25 @@ class Panel(Window):
else:
# 20% opacity when DND is disabled
self.dnd_indicator.set_style("opacity: 0.2;")
def on_notification_count_changed(self, service, *args):
"""Handle notification count changes from the service."""
self.update_notification_icon()
def update_notification_icon(self):
"""Update the notification icon based on count and DND state."""
count = notification_service.count
dnd_enabled = modus_service.dont_disturb # Use modus_service for DND state
if dnd_enabled:
# DND is enabled - show disabled icon
icon_file = "notification-disabled.svg"
elif count > 0:
# Has notifications - show active icon
icon_file = "notification-active.svg"
else:
# No notifications - show inactive icon
icon_file = "notification-inactive.svg"
icon_path = get_relative_path(f"../../config/assets/icons/notifications/{icon_file}")
self.notification_icon.set_from_file(icon_path)