Give Input keycaps, a shortcut search, and the missing pointer basics

Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
Gabriel Brown
2026-08-24 15:21:01 -04:00
parent b8f88a91f3
commit aba2d16ffa
25 changed files with 2346 additions and 191 deletions
+20 -2
View File
@@ -9,7 +9,7 @@ fail() {
exit 1
}
pages=(Home MyHome Phone Displays Connectivity Bar Dock ControlCenter Tiling Workspaces Sync Sound Dictation Notifications Focus ScreenIntelligence Health About)
pages=(Home MyHome Phone Displays Connectivity Bar Dock ControlCenter Tiling Workspaces Sync Sound Shortcuts Mouse Dictation Notifications Focus ScreenIntelligence Health About)
for page in "${pages[@]}"; do
page_file="$repo_dir/config/dot/quickshell/modules/settings/${page}Page.qml"
[[ -f "$page_file" ]] || fail "${page}Page.qml is missing"
@@ -79,6 +79,24 @@ block = re.search(
raise SystemExit(0 if block and re.search(r'zeroLabel\s*:\s*"Never"', block.group(0)) else 1)
PY
# The pointer and touchpad keys added with the Input redesign, each on the page
# its schema group routes to.
#
# Checked by hand rather than through require_row, because half of them render
# through OptionPickerRow, which takes its label and options from
# `PreferenceSchema.spec()` and commits by name -- it has no `setting:`
# property at all. That is a deliberate pattern for dropdowns, but it means the
# scans that look for `setting:` rows (settings-ownership-contract's
# duplicate-key sweep, search-routing-contract's routing sweep) cannot see
# these rows, so a key that stopped rendering would leave no other trace.
mouse_page="$repo_dir/config/dot/quickshell/modules/settings/MousePage.qml"
for setting in focusOnClose scrollMethod scrollButton cursorHideWhileTyping \
cursorWarpOnWorkspaceChange touchpadClickfinger touchpadTapAndDrag; do
rg -Fq "setting: \"$setting\"" "$mouse_page" \
|| rg -Fq "commitPreference(\"$setting\"" "$mouse_page" \
|| fail "MousePage.qml renders no control for $setting"
done
intelligence_page="$repo_dir/config/dot/quickshell/modules/settings/ScreenIntelligencePage.qml"
# Free text, not a choice. Three preset folders could not include the one the
# rest of somebody's software already writes to, which is the only folder that
@@ -311,7 +329,7 @@ shell_pid="$harness_pid"
# four different categories, and the page the tab strip was introduced for.
# Routing to a tab must land on that tab, not on whatever its category opens
# first, which is the failure the SettingsRoutes resolution could introduce.
pages=(home appearance displays connectivity my-home phone bar dock control-center tiling workspaces sync sound dictation notifications focus screen-intelligence shortcuts services manual about)
pages=(home appearance displays connectivity my-home phone bar dock control-center tiling workspaces sync sound dictation notifications focus screen-intelligence shortcuts mouse services manual about)
for page in "${pages[@]}"; do
qs_for_test ipc call settings page "$page" >/dev/null
for _ in $(seq 1 20); do