roundabout,
created on Monday, 18 August 2025, 15:06:09 (1755529569),
received on Monday, 18 August 2025, 15:06:12 (1755529572)
Author identity: Vlad <vlad.muntoiu@gmail.com>
a60d1567af9f2440c1ba64126c537338adaa9e38
applets/notifier/__init__.py
@@ -39,6 +39,10 @@ custom_css = """
.notification-button {
padding: 0;
}
.panorama-panel-notifier-summary {
font-weight: 600;
}
"""
css_provider = Gtk.CssProvider()
@@ -46,7 +50,7 @@ css_provider.load_from_data(custom_css)
Gtk.StyleContext.add_provider_for_display(
Gdk.Display.get_default(),
css_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
100
)
@@ -106,6 +110,38 @@ class BriefNotification(Gtk.Box):
self.set_halign(Gtk.Align.CENTER)
class DetailedNotification(Gtk.ListBoxRow):
def __init__(self, app_name, replaces_id, app_icon, summary, body, actions, hints, expire_timeout):
Gtk.ListBoxRow.__init__(self)
if not app_icon:
app_icon = "preferences-desktop-notifications"
self.box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=8)
self.set_child(self.box)
self.icon = Gtk.Image.new_from_icon_name(app_icon)
self.icon.set_icon_size(Gtk.IconSize.LARGE)
self.box.append(self.icon)
self.text_area = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=4)
self.summary = Gtk.Label.new(summary)
self.summary.set_halign(Gtk.Align.START)
self.summary.set_xalign(0)
self.summary.add_css_class("panorama-panel-notifier-summary")
self.text_area.append(self.summary)
self.body = Gtk.Label.new(body)
self.body.set_halign(Gtk.Align.START)
self.body.set_xalign(0)
self.summary.add_css_class("panorama-panel-notifier-body")
self.text_area.append(self.body)
# TODO: add actions
self.box.append(self.text_area)
class NotifierApplet(panorama_panel.Applet):
name = _("Notification centre")
description = _("Get desktop notifications")
@@ -128,6 +164,10 @@ class NotifierApplet(panorama_panel.Applet):
self.stack.add_child(self.notification_indicator)
self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_UP_DOWN)
self.stack.set_transition_duration(500)
self.popover = Gtk.Popover()
self.notification_list = Gtk.ListBox(selection_mode=Gtk.SelectionMode.NONE)
self.popover.set_child(self.notification_list)
self.button.set_popover(self.popover)
# TODO: support the other parameters; add a popover with a history
self.append(self.button)
@@ -156,6 +196,8 @@ class NotifierApplet(panorama_panel.Applet):
if expire_timeout <= 0:
expire_timeout = 2500
GLib.timeout_add(expire_timeout, remove_notification)
self.notification_list.append(DetailedNotification(app_name, replaces_id, app_icon, summary, body, actions, hints, expire_timeout))
# TODO: notify that it was closed
def get_config(self):