aboutsummaryrefslogtreecommitdiffstats
path: root/notifications/Balloons.qml
diff options
context:
space:
mode:
Diffstat (limited to 'notifications/Balloons.qml')
-rw-r--r--notifications/Balloons.qml25
1 files changed, 12 insertions, 13 deletions
diff --git a/notifications/Balloons.qml b/notifications/Balloons.qml
index 28ffafb..9fa5a85 100644
--- a/notifications/Balloons.qml
+++ b/notifications/Balloons.qml
@@ -27,21 +27,20 @@ Scope {
onTriggered: root.now = Date.now()
}
- // Which live notifications draw here. Suppression is deliberately here
- // and not in the daemon: the drawer lists a notification DND chose not to
- // pop, because a list the user opened is not an interruption.
- readonly property var visible: (Notify.queue || []).filter(p => {
- if (Notify.drawerOpen) return false;
- if (p.expires !== 0 && root.now >= p.expires) return false;
- if (Notify.snoozeUntil > root.now) return false;
- if (Status.dnd && p.urgency !== "critical") return false;
- return true;
- })
+ // The Repeater model is Notify.queue itself, so its identity only changes
+ // when the daemon rewrites the file, not on the 250ms tick. Expiry and
+ // snooze are the balloon's own business: the tick reassigns `now`, each
+ // balloon re-evaluates its visible binding and leaves the column at
+ // expiry. Rebuilding the model on the tick would recreate every delegate
+ // (reloading icons, resetting hover) four times a second.
+ readonly property var live: Notify.queue || []
PanelWindow {
id: win
- visible: root.visible.length > 0
+ // Each balloon hides itself when it expires or is suppressed, so the
+ // column collapses to zero and the window follows it.
+ visible: column.implicitHeight > 0
screen: Quickshell.screens.find(s => s.name === "DP-1") ?? Quickshell.screens[0]
anchors { bottom: true; right: true }
margins { bottom: 12; right: 12 }
@@ -60,8 +59,8 @@ Scope {
spacing: 8
Repeater {
- model: root.visible
- NotificationBalloon { notification: modelData }
+ model: root.live
+ NotificationBalloon { notification: modelData; now: root.now }
}
}
}