aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-11 16:57:33 +0200
committerDanilo M. <danix@danix.xyz>2026-09-11 16:57:33 +0200
commitd00f52480b19b714f50b1a017935e94ed1b486b5 (patch)
tree670ea31d1b9317a8f6c9453abf9867a7ce073d97
parent4c4ed4e3ce3dd25395866cb0bb71a8187f359dbe (diff)
downloadquickshell-d00f52480b19b714f50b1a017935e94ed1b486b5.tar.gz
quickshell-d00f52480b19b714f50b1a017935e94ed1b486b5.zip
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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
-rw-r--r--volume-osd/README.md7
-rw-r--r--volume-osd/VolumeOsd.qml13
2 files changed, 20 insertions, 0 deletions
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