aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/README.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-14 12:44:09 +0200
committerDanilo M. <danix@danix.xyz>2026-09-14 12:44:09 +0200
commit60eae607ab75988fc441bb4d87ef790175009572 (patch)
treeb200101e43856d0cf2629b4b3d9564f54ec10be6 /desktop/README.md
parent901e7d83f8af3defe2c602daad98fd3c67e1dd7c (diff)
downloadquickshell-60eae607ab75988fc441bb4d87ef790175009572.tar.gz
quickshell-60eae607ab75988fc441bb4d87ef790175009572.zip
fix(desktop): honest alwaysActive docs and working Escape in confirm
Diffstat (limited to 'desktop/README.md')
-rw-r--r--desktop/README.md30
1 files changed, 17 insertions, 13 deletions
diff --git a/desktop/README.md b/desktop/README.md
index e443ca0..29223b7 100644
--- a/desktop/README.md
+++ b/desktop/README.md
@@ -43,8 +43,9 @@ drawer needs to show it:
null for a tile that says nothing beyond its name.
- `page`: a `Component` for the full-height page behind the tile, or null.
- `activate()`: what a tile with no page does when clicked.
-- `alwaysActive`: whether the module's background service runs while the
- drawer is closed, covered below.
+- `alwaysActive`: declares whether the module's service is meant to run while
+ the drawer is closed. The drawer does not read it, the module implements its
+ own lifetime. Covered below.
A module provides a tile, a page, both, or neither. The drawer does not care
which: it reads those properties and does the obvious thing. A page is wrapped
@@ -53,7 +54,8 @@ fire-and-forget, so its click calls `activate()` and closes the drawer.
`modules/appearance/AppearanceModule.qml` is the smallest complete example: a
name, an icon, a label, and an `activate()` that launches the separate
-appearance shell. It has no page and no service. Sound, mail and vm each add a
+appearance shell. It has no page, and it owns only a `Process` that fires the
+picker on click, no always-active service. Sound, mail and vm each add a
service and a page on top of that same shape.
Module files live under `desktop/modules/<name>/` and reference root types
@@ -63,20 +65,22 @@ directory import does not reach the parent. The moved `TransportButton.qml` and
## alwaysActive
-Sound and mail are `alwaysActive: true`; vm is false. The property governs the
-module's background service, not its page: pages are lazily loaded either way.
+`alwaysActive` is declarative metadata: it documents whether a module's service
+is meant to run while the drawer is closed. The drawer does not read or enforce
+it. Each module implements its own service lifetime, and the property records
+that choice rather than driving it. Sound and mail are `alwaysActive: true`; vm
+is false.
Sound's OSD has to answer a volume keypress with no drawer open, which is the
-whole point of it, so its PipeWire service runs for the session. Mail's unread
-count outlives the drawer and its config watcher makes a newly added account
-appear without a restart, so its service runs too. The vm module's 2s stats
-poll exists only to paint a page nobody is looking at, so it starts and stops
-with the page.
+whole point of it, so its PipeWire service is instantiated eagerly and runs for
+the session. Mail's unread count outlives the drawer and its config watcher
+makes a newly added account appear without a restart, so its service is
+instantiated eagerly too. The vm module's 2s stats poll exists only to paint a
+page nobody is looking at, so it starts and stops with the page.
-That last line is not the whole story for vm: its lifecycle event stream runs
+vm is not only its poll, however: its lifecycle event stream runs
unconditionally, which is what keeps the VM list and the tile's dots current
-while the page is closed. `alwaysActive` gates the poll, not everything the
-module does.
+while the page is closed. Pages are lazily loaded in every module.
## Geometry