diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-15 14:33:23 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-15 14:33:23 +0200 |
| commit | 2c15d79296380a3c46da560484daaf5ac7b2a869 (patch) | |
| tree | a65c3105ecfc0b2875a1215fa5810f398a9732d8 /notifications/Balloons.qml | |
| parent | cb7c95ae7e14249cd9b6d8bba7923713a66eed39 (diff) | |
| download | quickshell-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.qml | 11 |
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 } |
