From d00f52480b19b714f50b1a017935e94ed1b486b5 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Fri, 11 Sep 2026 16:57:33 +0200 Subject: fix(volume-osd): keep the shell alive when nothing is visible Quickshell exits once no window is visible. The OSD is hidden between changes, and with no MPRIS player running there is nothing else to hold it open, so the process loaded cleanly, logged no error and quit. The symptom was a panel that never appeared: not a blank panel, a dead shell. A 1x1 transparent window with an empty mask keeps it running. The mask makes it click-through, so it cannot catch a stray click, and it draws nothing. This window existed earlier and was removed after a process check that was measuring the wrong thing, which made it look unnecessary. The README now says why it is there, so it does not get removed a third time. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7 --- volume-osd/README.md | 7 +++++++ volume-osd/VolumeOsd.qml | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/volume-osd/README.md b/volume-osd/README.md index d99140f..5ec9f59 100644 --- a/volume-osd/README.md +++ b/volume-osd/README.md @@ -118,6 +118,13 @@ current while something binds the node. Without the tracker the volume reads once and then goes stale, which looks like an OSD that displays a number from several changes ago. +**A config with no visible window exits.** The OSD is hidden most of the time, +so it holds itself open with a 1x1 transparent window with an empty mask, +which is click-through and draws nothing. Without it the shell loads, reports +no error, and quits, and the symptom is a keybind that appears to do nothing +or a panel that never paints. This was removed once during development after +misreading a process check, and the bug came straight back. + **A Row sizes to its children, not to its parent.** The track row's text column originally had a fixed width, and art + text + buttons + spacing came to 356px inside a 328px content box, so the `next` button hung over the panel diff --git a/volume-osd/VolumeOsd.qml b/volume-osd/VolumeOsd.qml index ab7eb62..f739aec 100644 --- a/volume-osd/VolumeOsd.qml +++ b/volume-osd/VolumeOsd.qml @@ -81,6 +81,19 @@ Scope { onTriggered: root.active = null } + // Quickshell exits once no window is visible, and the OSD is hidden most + // of the time, so a 1x1 transparent window holds the process open. Its + // empty mask makes it click-through, so it cannot catch a stray click. + PanelWindow { + visible: true + implicitWidth: 1 + implicitHeight: 1 + color: "transparent" + exclusionMode: ExclusionMode.Ignore + mask: Region {} + WlrLayershell.keyboardFocus: WlrKeyboardFocus.None + } + PanelWindow { id: win -- cgit v1.2.3