Skip to content

Keyboard Shortcut Audit

MagicDesk Contributors edited this page Oct 2, 2026 · 2 revisions

Desktop Keyboard Shortcut Audit (UX-012a)

Source-only audit for issue #30, against main e0eabe82. Findings are source findings; proposals are proposed; nothing here is device-verified. Direction: mouse and keyboard on a workstation target follow familiar Windows/Linux conventions (Fork Product Direction).

How shortcuts reach the code

Current chords (source of truth: KeyboardShortcutStateMachine.action)

Chord Action Notes
Alt+Tab / Alt+Shift+Tab Task switcher, committed on Alt release Conventional
Ctrl+Alt+Tab (then Tab / Shift+Tab, Esc cancels) Display switch Not a persistent switcher as on Windows
Alt+F4 Close active window Conventional
Win+Space Toggle hardware keyboard layout See G2
Esc Dismiss transient MagicDesk UI Not consumed; reaches the app too
Win+Up Fullscreen (SHORTCUT_FULLSCREEN) MagicDesk's maximize equivalent
Win+Down Restore, then minimize Matches Windows
Win+Left / Win+Right Snap half; then Up/Down while Win held walks corners Windows-like, stateful
Win+D Show/restore desktop Conventional
Win+L Lock device Conventional
Win+I MagicDesk settings Windows opens Settings
Win+N Notifications Windows: notification center
Win+E Open Files Built-in file manager; see G4
Ctrl+Shift+Esc Open Task Manager Built-in task manager; see G5
Win+S / Ctrl+Esc Open Start Intended to focus Start search; device confirmation pending
Win+A / Win+Q Android system controls Win+Q retained as a compatibility alias; Windows uses Win+A for quick settings
Win+Backspace Android Back No desktop analog
Win+Print Screen / Win+Shift+Print Screen Screenshot / recording
Win+/ Shortcut help

A recognized chord is emitted once on key-down; its repeats return NONE while remaining consumed until key-up. Ctrl+Space now passes to the focused app. Unrecognized combinations return NONE unconsumed and reach the focused application. Every Win+Shift combination other than Print Screen is currently unrecognized.

Gaps against a conventional desktop set

# Convention Today Class Proposal Confirming check
G1 Tapping the Windows key opens Start A Meta press/release is consumed with Action.NONE by the state machine. Start is toggled only in DesktopInputController when the shell window has focus and !isFullKeyboardShortcutMode(). With the key filter ready, that branch is skipped, so no code path toggles Start on a lone Meta tap. Possible missing behavior Emit a Start action on Meta release when no chord key was used in between, from the state machine; keep suppressing the system's own Meta action. Filter active, app focused: tap Win → Start opens once; Win+D etc. do not also open Start.
G2 (#34; implemented in PR #40) Layout switch is Win+Space (Windows, GNOME) or Alt+Shift Main now passes Ctrl+Space through and toggles layout with Win+Space. Host behavior implemented; device check pending Keep Win+Space as the default and preserve normal Ctrl+Space delivery. Terminal/editor receives Ctrl+Space; Win+Space switches layout.
G3 (#35; implemented in PR #40) Win+S / Ctrl+Esc opens Start search; Win+A opens system controls Main maps Win+S and Ctrl+Esc to Start, and Win+A/Win+Q to system controls. Whether the search field receives keyboard focus needs changed-build device confirmation. Implemented; focus/device validation pending Keep the existing dispatch and confirm search focus; preserve Win+Q as an alias. Chord opens the intended panel on the input display and Start search accepts typing immediately.
G4 (#35; implemented in PR #40) Win+E opens the file manager Main maps Win+E to the built-in Files launcher through the display-aware gateway. Implemented; device validation pending Reuse the existing app-placement path. Opens on the input display and reuses an existing window.
G5 (#35; implemented in PR #40) Ctrl+Shift+Esc opens the task manager Main maps the chord to the built-in Task Manager. Implemented; device validation pending Reuse the existing built-in launch path. Opens once on the input display; outside Desktop the chord reaches the focused app.
G6 Win+1…9 activates or launches the nth taskbar item No chord. Missing Activate through DesktopTaskController focus path; launch pinned item when not running. Depends on profile-correct taskbar identity (#18) and stable taskbar order. Same entry as the nth taskbar button; no second observer.
G7 Win+Shift+Left/Right moves the window to another display if (shift) return NONE after Print Screen. Missing Move through the existing task-transfer path; display ordering must match Ctrl+Alt+Tab. Window changes display, keeps mode and focus.
G8 Win+Tab / overview No chord in the state machine. AGENTS.md and product direction refer to an overview that shares the task gateway; its entry point was not traced here. Missing Trace the overview entry point, then map it. Low priority. Chord opens the same overview as its current trigger.
G9 Alt+Space window menu No chord. Missing Optional; needs a window-menu target by exact task. Low priority.

Android-owned chords (Home, Recents, Back via system keys, power) remain Android's and are not candidates.

Implementation and validation state

PR #40 is merged at the main baseline above. Its focused desktop host check passed in 18 seconds. The full Android CI build and changed-build keyboard/device checks remain pending. Issues #34 and #35 remain open for those checks; issue #35 specifically tracks Start search focus and built-in app placement.

Follow-ups

Issues #33, #34, #35, and #37 split the accepted gaps by owner and environment. Each keeps ordinary typing pass-through intact and adds KeyboardShortcutStateMachineTest coverage before dispatch changes. Source audit claims describe code paths only; device behavior remains unverified until each issue records its changed-build check.

Clone this wiki locally