diff options
| -rwxr-xr-x | bin/wb-icon | 1 | ||||
| -rw-r--r-- | modules/custom/presentation.jsonc | 6 | ||||
| -rw-r--r-- | styles/modules.css | 7 |
3 files changed, 14 insertions, 0 deletions
diff --git a/bin/wb-icon b/bin/wb-icon index b8bb098..ebbd57d 100755 --- a/bin/wb-icon +++ b/bin/wb-icon @@ -144,6 +144,7 @@ def selftest(): presentation_icons = [ "preferences-desktop-screensaver", # off "x-office-presentation", # on + "input-gaming", # held on by a running game ] mail_icons = ["mail-unread"] diff --git a/modules/custom/presentation.jsonc b/modules/custom/presentation.jsonc index 8544b26..a6dd20a 100644 --- a/modules/custom/presentation.jsonc +++ b/modules/custom/presentation.jsonc @@ -10,6 +10,12 @@ // normal state before anything has written one, and a file cannot report // whether a watcher is alive anyway. // +// A third class, gaming, covers the mode being held on by a running game: the +// shell's detector owns status.gaming and presentation is the OR of the two, +// so a game turns the mode on without touching the manual half. The click is +// inert in that state, statusctl refuses the toggle, because the detector +// would reassert it within its poll anyway. +// // statusctl talks to files under XDG_RUNTIME_DIR rather than to quickshell, // so this keeps working while the shell is down. // The format is a single space, and it has to be something. It defaults to diff --git a/styles/modules.css b/styles/modules.css index 3aa55c6..b0e2f2a 100644 --- a/styles/modules.css +++ b/styles/modules.css @@ -246,3 +246,10 @@ #custom-presentation.activated { background-image: url("@ICON:x-office-presentation@"); } + +/* A running game holds presentation on by itself, through a separate state + * file the shell's detector owns. It gets its own icon because the click is + * inert here: the mode is not off until the game exits. */ +#custom-presentation.gaming { + background-image: url("@ICON:input-gaming@"); +} |
