aboutsummaryrefslogtreecommitdiffstats
path: root/notifications/Balloons.qml
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-15 14:33:23 +0200
committerDanilo M. <danix@danix.xyz>2026-09-15 14:33:23 +0200
commit2c15d79296380a3c46da560484daaf5ac7b2a869 (patch)
treea65c3105ecfc0b2875a1215fa5810f398a9732d8 /notifications/Balloons.qml
parentcb7c95ae7e14249cd9b6d8bba7923713a66eed39 (diff)
downloadquickshell-2c15d79296380a3c46da560484daaf5ac7b2a869.tar.gz
quickshell-2c15d79296380a3c46da560484daaf5ac7b2a869.zip
fix(notifications): map the balloon window from the queue, not layout
Deriving the window's visible from column.implicitHeight deadlocked it: a hidden window stops polishing, Column computes implicitHeight during polish, so once the column was empty the window never re-mapped and no later balloon could show, including at startup where the queue arrives asynchronously after the window is already hidden. The binding now reads Notify.queue membership, which a property binding re-evaluates whether or not the window is mapped, so a later notification re-maps it. Expired entries left in the queue keep a zero-height window mapped, which is harmless.
Diffstat (limited to 'notifications/Balloons.qml')
-rw-r--r--notifications/Balloons.qml11
1 files changed, 8 insertions, 3 deletions
diff --git a/notifications/Balloons.qml b/notifications/Balloons.qml
index 9fa5a85..3676e67 100644
--- a/notifications/Balloons.qml
+++ b/notifications/Balloons.qml
@@ -38,9 +38,14 @@ Scope {
PanelWindow {
id: win
- // 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
+ // From the queue, never from layout: a hidden window stops polishing,
+ // and Column computes implicitHeight during polish, so deriving
+ // visibility from it would never turn true again after the first
+ // hide. Queue membership is a plain property the binding re-reads
+ // whether or not the window is mapped, so a later notification
+ // re-maps it. Expired entries that stay in the queue keep a
+ // zero-height window mapped, which is harmless.
+ visible: root.live.length > 0
screen: Quickshell.screens.find(s => s.name === "DP-1") ?? Quickshell.screens[0]
anchors { bottom: true; right: true }
margins { bottom: 12; right: 12 }