From 2c15d79296380a3c46da560484daaf5ac7b2a869 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Tue, 15 Sep 2026 14:33:23 +0200 Subject: 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. --- notifications/Balloons.qml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'notifications') 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 } -- cgit v1.2.3