You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Add native QWERTY switch-scanning keyboard (#789)
* Verify keyboard focus handoff and fix native key rendering
* Use rectangular image helper for macOS keyboard tiles
* Pad and vertically centre Windows keyboard labels
Measure wrapped key text before drawing and centre it inside scaled horizontal and vertical margins. Keep action-menu and modifier-overlay placement unchanged.
* Preserve room for wrapped keyboard labels on smaller displays
* Refine switch keyboard layout and scan feedback
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.
* Round and pad the scanning keyboard panel
Render a transparent rounded backdrop with scaled outer padding. Keep the backdrop cached during key scanning and verify transparent corners and inset control bounds.
* Skip empty native labels to prevent keyboard opening crash
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.
* Remove number row from the letters keyboard
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.
---------
Co-authored-by: Owen McGirr <o.a.mcgirr@gmail.com>
Co-authored-by: Owen McGirr <owenmcgirr@Owens-Mac-Studio-2.local>
Switchify has its own UK English keyboard on Windows and macOS. It uses the saved local switches or the existing Android remote scanning actions. It does not use the operating system's on-screen keyboard.
4
+
5
+
Choose a point and select **Type here** to click that point once and open the keyboard. To keep the existing input focus without clicking, select **More → Keyboard**. The keyboard does not take focus or accept mouse clicks.
6
+
7
+
Scan a row, select it, then scan and select a key. The escape slot returns to rows. After typing, scanning starts again at the first row. Existing automatic/manual movement, speed, pause, reverse and inactivity suspension apply. The keyboard stays open after Space, Backspace, Enter and Tab. **Close** returns to point scanning.
8
+
9
+
Pages:
10
+
11
+
-**Letters:** UK QWERTY and punctuation, with Backspace beside the top letter row.
12
+
-**Functions:** Esc, F1–F12, arrows, Home, End, Page Up, Page Down and Delete. Windows also has Insert, Print Screen, Scroll Lock and Pause.
13
+
-**Numbers:** digits, decimal point, arithmetic operators, UK number-row symbols (including £), Enter and Backspace. Digits are independent of hardware Num Lock.
14
+
15
+
The bottom control row starts with Close keyboard, followed by Letters, Navigation, Numbers and docking. Space has a dedicated wide key. Editing and modifier keys are wider than ordinary characters; duplicate Shift and Caps controls are removed from the letters page. A header names the current page and scan target. The return-to-rows slot highlights only the header. Active modifiers and the current page have an indicator separate from the scan highlight. Modifiers are available on every page. Shift, Ctrl, Alt/Option and Windows/Command cycle through **off → once → locked → off**. The label shows once or locked. Caps is a keyboard-local uppercase setting; Shift reverses its letter case. Page and position controls do not consume a one-shot modifier.
16
+
17
+
Modifier keys are pressed only around each emitted shortcut and immediately released. Selecting a locked modifier does not hold that operating-system key while the scanner runs. Ordinary characters use text injection; command combinations and navigation use native key events. Native shortcuts retain the operating system's layout semantics.
18
+
19
+
The keyboard closes when the foreground target or display environment changes, or its scan session ends. Failed input clears keyboard modifiers and requires Select to resume. Stop, disconnect and application exit use the shared deterministic input cleanup. No typed text is logged, and no prediction data, context reader, protocol extension or persistent keyboard settings are added.
20
+
21
+
## Manual validation
22
+
23
+
Use synthetic text in Notepad and a browser on Windows, and TextEdit and a browser on macOS. Launch macOS through `npm run macos:run` to retain its Accessibility identity.
24
+
25
+
1. Use Type here and verify exactly one click focuses the intended field. Use More → Keyboard and verify no click or focus change occurs.
26
+
2. Type lowercase letters, uppercase letters with Shift/Caps, and UK punctuation including £, @ and double quotes. Test Space, Backspace, Enter and Tab.
27
+
3. Test Ctrl+A/C/V on Windows and Command+A/C/V on macOS. Cycle once/locked/off, including Shift with another modifier, and confirm no modifier remains physically held between selections.
28
+
4. Visit every page. Verify row/key highlighting, reverse movement, row escape, suspension/resume, returning to the first row after a key and Close.
29
+
5. Move the keyboard between the top and bottom. Check a scaled display and a secondary display, including negative coordinates. Verify the keyboard fits the work area and never activates its native windows.
30
+
6. Switch foreground apps, disconnect remote scanning, change display configuration and close Switchify. Verify overlays disappear and owned input is released.
31
+
32
+
Automated tests use fake input adapters only. Native manual results must be recorded separately; compilation and unit tests do not establish live application compatibility.
0 commit comments