Skip to content

Add native QWERTY switch-scanning keyboard - #790

Merged
enaboapps merged 11 commits into
mainfrom
codex/qwerty-keyboard-789
Sep 19, 2026
Merged

enaboapps merged 11 commits into
mainfrom
codex/qwerty-keyboard-789

Conversation

@enaboapps

@enaboapps enaboapps commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

Adds a native UK English QWERTY keyboard controlled by Switchify row/key scanning on Windows and macOS. Type here clicks the selected point once and verifies focus before accepting keys; More → Keyboard preserves current focus. Letters, navigation/function and numeric pages support one-shot/locked modifiers, local Caps, docking and Close.

The keyboard uses a rounded panel with scaled outer padding, rounded keys, weighted editing keys and a dedicated wide Space bar. Letters starts with QWERTY, with Backspace beside the top letter row. The Numbers page retains all digits and UK number-row symbols. Letter-page modifiers are no longer duplicated. Distinct key/control typography, active-state indicators and measured text placement clarify what will happen next. A header names the current page and target; the row-return slot highlights only the return instruction. Close keyboard is the first item in the control row.

Input uses the existing generated-event tagging and cleanup with nonactivating, click-through overlays and foreground/display/session guards. The branch incorporates the Windows capture worker fix from #792. Prediction, context extraction and settings/protocol changes remain outside this PR.

Closes #789

Validation at 02bd8e8:

  • Node 24: lint, 154 frontend tests, five script tests and production build pass.
  • Rust 1.97.1: formatting, Mac Clippy, 425 unit tests and seven integration tests pass using fake input.
  • Windows ARM VM: native debug build, Clippy, 423 unit tests and seven integration tests pass. The additional interactive native overlay smoke test passed separately in the Windows VM, rendering every keyboard tile including the rounded background (424 Windows unit tests total).
  • Regression coverage includes unique control reachability, wide Space/editing keys, small displays and negative coordinates, transparent outer corners and padded control bounds, modifier-state feedback and row-return highlighting.
  • Independent latest-head review found no actionable findings.
  • Layout preview inspected using production frame geometry; this is not a substitute for native keyboard appearance validation.
  • Updated debug app launched in the Windows VM and verified at Ready for switch control, with its isolated capture worker running. Saved switches remain unchanged. Local signed Mac app untouched.
  • Previous head CI passed. Fresh CI is running for this head. Signed UIAccess and full native typing/layout validation remain outstanding; this VM deployment is for user testing.

Opening-crash fix: the new background tile has no label. Calling DrawTextW with the empty Rust slice caused a user32 access violation, reproduced with a minimal native GDI probe in the Windows ARM VM. Empty labels now skip both native measurement and drawing. Added a native empty-label regression and extended the interactive overlay smoke test to cover the entire keyboard. Independent latest-head review passed.

@enaboapps enaboapps added this to the v1.0.0-rc.12 milestone Sep 18, 2026
Owen McGirr added 8 commits September 18, 2026 19:33
Measure wrapped key text before drawing and centre it inside scaled horizontal and vertical margins. Keep action-menu and modifier-overlay placement unchanged.
Use weighted editing keys, a dedicated wide Space bar and one copy of each modifier. Add keyboard-specific visual roles, active-state indicators, rounded key artwork and a solid panel. Clarify row return and scan target feedback while preserving input and switch timing.
Render a transparent rounded backdrop with scaled outer padding. Keep the backdrop cached during key scanning and verify transparent corners and inset control bounds.
Avoid passing an empty UTF-16 slice to DrawTextW for the rounded keyboard backdrop. Cover empty labels through the native drawing path and render the full keyboard in the interactive overlay smoke test.
Move Backspace beside QWERTY and retain the removed digits and UK symbols on the Numbers page. Cover character availability and the letters layout in regression tests.
@enaboapps
enaboapps merged commit 8105a51 into main Sep 19, 2026
6 checks passed
@enaboapps
enaboapps deleted the codex/qwerty-keyboard-789 branch September 22, 2026 09:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add custom QWERTY switch-scanning keyboard

2 participants