roundabout,
created on Monday, 18 August 2025, 14:13:30 (1755526410),
received on Monday, 18 August 2025, 14:13:33 (1755526413)
Author identity: Vlad <vlad.muntoiu@gmail.com>
7c8025178b928e42e52feeb75f242dbf3a04e9a2
applets/notifier/__init__.py
@@ -111,7 +111,9 @@ class NotifierApplet(panorama_panel.Applet):
self.stack = Gtk.Stack()
self.button.set_child(self.stack)
self.notification_indicator = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
self.notification_indicator.append(Gtk.Image.new_from_icon_name(""))
self.notification_indicator.append(Gtk.Image.new_from_icon_name("emblem-important"))
self.notification_count_label = Gtk.Label.new("0")
self.notification_indicator.append(self.notification_count_label)
self.stack.add_child(self.notification_indicator)
self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_UP_DOWN)
self.stack.set_transition_duration(500)
@@ -127,10 +129,18 @@ class NotifierApplet(panorama_panel.Applet):
self.stack.add_child(new_child)
self.stack.set_visible_child(new_child)
def remove_notification():
self.stack.set_visible_child(self.stack.get_visible_child().get_prev_sibling())
def remove_child():
self.stack.remove(new_child)
GLib.timeout_add(self.stack.get_transition_duration(), remove_child)
if self.stack.get_visible_child() == new_child:
self.stack.set_visible_child(self.stack.get_visible_child().get_prev_sibling())
GLib.timeout_add(self.stack.get_transition_duration(), remove_child)
else:
# TODO: split the time
def readd_timeout(*args):
if new_child == self.stack.get_visible_child():
GLib.timeout_add(self.stack.get_transition_duration(), remove_notification)
self.stack.connect("notify::visible-child", readd_timeout)
return False
if expire_timeout <= 0:
expire_timeout = 2500
config.yaml
@@ -47,7 +47,8 @@ panels:
icon: applications-other
trigger_name: app-menu
icon_name: start-here-symbolic
centre: []
centre:
- NotifierApplet: {}
right:
- Volume: {}
- ClockApplet:
main.py
@@ -163,6 +163,7 @@ class PanelConfigurator(Gtk.Frame):
app: PanoramaPanel = self.get_root().get_application()
monitor = app.monitors[int(self.monitor_number_adjustment.get_value())]
self.panel.unmap()
self.panel.monitor_index = int(self.monitor_number_adjustment.get_value())
Gtk4LayerShell.set_monitor(self.panel, monitor)
self.panel.show()
@@ -342,7 +343,7 @@ POSITION_TO_LAYER_SHELL_EDGE = {
class Panel(Gtk.Window):
def __init__(self, application: Gtk.Application, monitor: Gdk.Monitor, position: Gtk.PositionType = Gtk.PositionType.TOP, size: int = 40, autohide: bool = False, hide_time: int = 0, can_capture_keyboard: bool = False):
def __init__(self, application: Gtk.Application, monitor: Gdk.Monitor, position: Gtk.PositionType = Gtk.PositionType.TOP, size: int = 40, autohide: bool = False, hide_time: int = 0, can_capture_keyboard: bool = False, monitor_index: int = 0):
super().__init__(application=application)
self.drop_motion_controller = None
self.motion_controller = None
@@ -351,6 +352,7 @@ class Panel(Gtk.Window):
self.autohide = None
self.monitor_name = monitor.get_connector()
self.hide_time = None
self.monitor_index = 0
self.can_capture_keyboard = can_capture_keyboard
self.open_popovers: set[int] = set()
@@ -625,7 +627,7 @@ class PanoramaPanel(Gtk.Application):
hide_time = panel_data["hide_time"]
can_capture_keyboard = panel_data["can_capture_keyboard"]
panel = Panel(self, monitor, position, size, autohide, hide_time, can_capture_keyboard)
panel = Panel(self, monitor, position, size, autohide, hide_time, can_capture_keyboard, monitor_index)
self.panels.append(panel)
print(f"{size}px panel on {position} edge of monitor {monitor_index}, autohide is {autohide} ({hide_time}ms)")