Panama Settings shipped with Icon=preferences-system-symbolic, a monochrome glyph drawn for 16px toolbar use. Beside full-colour application icons in a 48px dock it reads as a missing icon rather than a quiet one. It now has its own: a gear, because a settings icon has to be recognisable before it is clever, rendered in the Prism gradient on the dark tile so it belongs to this desktop. An earlier attempt drew the gear as a ring with radial strokes; at dock size the strokes merged into the ring and it read as an X. The shipped version is a real toothed outline, checked at 48px rather than only at 128. The dock also pinned GNOME Settings first. Panama now covers what GNOME Settings did for this desktop and delegates the remainder to it by name, so pinning the thing it delegates TO put the fallback in front of the real one. GNOME Settings stays installed and searchable. link-dotfiles installs icons alongside desktop entries, so this survives a fresh setup rather than being a file that happens to exist here. The new contract asserts every pinned application resolves to an installed desktop entry. DockBody drops an unresolvable pin rather than drawing a broken icon, which is right at runtime and invisible to debug: a typo or a renamed desktop id just removes an icon with nothing logged. It also cost me a false negative while writing it -- DesktopEntries populates asynchronously, and asking too early reports every pin as missing. Also makes tests/quickshell/osd-ui-contract.sh executable. It was committed mode 644, the only test in the suite that was, so the runner could not invoke it. It passes. Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L
61 lines
2.2 KiB
Bash
Executable File
61 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
repo_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
qs_dir="$repo_dir/config/dot/quickshell"
|
|
osd="$qs_dir/modules/osd/Osd.qml"
|
|
state="$qs_dir/services/OsdState.qml"
|
|
shell_file="$qs_dir/shell.qml"
|
|
keybinds="$repo_dir/config/dot/hypr/keybinds.lua"
|
|
|
|
fail() {
|
|
printf 'osd ui contract: %s\n' "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
[[ -f "$osd" ]] || fail 'Prism OSD surface is missing'
|
|
[[ -f "$state" ]] || fail 'OSD presentation state is missing'
|
|
[[ -f "$qs_dir/modules/osd/qmldir" ]] || fail 'OSD module manifest is missing'
|
|
rg -q '^import Quickshell$' "$state" \
|
|
|| fail 'OSD singleton does not import the Quickshell Singleton type'
|
|
|
|
rg -Fq 'import qs.modules.osd' "$shell_file" || fail 'shell does not import the OSD module'
|
|
[[ "$(rg -c '^[[:space:]]*Osd \{\}' "$shell_file")" -eq 1 ]] \
|
|
|| fail 'shell does not create exactly one OSD per screen'
|
|
rg -Fq 'target: "osd"' "$shell_file" || fail 'OSD IPC target is missing'
|
|
rg -Fq 'OsdState.progress(kind, value, maximum, label)' "$shell_file" \
|
|
|| fail 'progress IPC is not wired to OSD state'
|
|
rg -Fq 'OsdState.message(kind, label)' "$shell_file" \
|
|
|| fail 'message IPC is not wired to OSD state'
|
|
|
|
rg -Fq 'WlrLayershell.namespace: "qs-popover-osd"' "$osd" \
|
|
|| fail 'OSD does not use the existing Prism blur namespace'
|
|
rg -Fq 'WlrLayershell.keyboardFocus: WlrKeyboardFocus.None' "$osd" \
|
|
|| fail 'OSD may steal keyboard focus'
|
|
rg -Fq 'mask: Region {}' "$osd" || fail 'OSD may intercept pointer input'
|
|
rg -Fq 'PrismEdge {' "$osd" || fail 'OSD is missing the Prism signature edge'
|
|
rg -Fq 'font.features: Theme.tabularFigures' "$osd" \
|
|
|| fail 'changing percentages do not use tabular figures'
|
|
|
|
rg -Fq '$HOME/.config/quickshell/scripts/panama-osd' "$keybinds" \
|
|
|| fail 'keybinds do not use the deployed Panama OSD helper'
|
|
for action in \
|
|
'volume up 6' \
|
|
'volume down 6' \
|
|
'volume toggle' \
|
|
'microphone toggle' \
|
|
'volume up 1' \
|
|
'volume down 1' \
|
|
'media play-pause' \
|
|
'media next' \
|
|
'media previous' \
|
|
'media stop' \
|
|
'brightness up 5' \
|
|
'brightness down 5'; do
|
|
rg -Fq "osd(\"$action\")" "$keybinds" \
|
|
|| fail "keybind is not routed through panama-osd $action"
|
|
done
|
|
|
|
printf 'osd ui contract: PASS\n'
|