Inject Remote lock keys instead of retiring keyboard input

Refusing Caps, Num and Scroll Lock retired all remote input, so a
controller using Caps Lock as its screen-reader modifier lost keyboard
control on the first press. Lock keys are now owned like other keys and
released once at retirement without another toggle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Chase CichorzandClaude Opus 5.5 committed 2026-11-06 16:06:38 -05:00
1 parent 8e0ac3b258
commit 1c8ec3ce10
4 files changed
+52 -14

No files matched your search

+13 -1
View File
@@ -62,7 +62,7 @@ fixture changes maps and lock state explicitly to exercise these cases.
See the [XKB library specification](https://xorg.freedesktop.org/archive/current/doc/libX11/XKB/xkblib.html)
for `XkbGetMap`, `XkbGetState` and `XkbTranslateKeyCode`.
Lock-key downs are unavailable until lock synchronization and reader modifier
(Superseded: see Lock keys below.) Lock-key downs were unavailable until lock synchronization and reader modifier
handling have a defined policy. This includes Caps Lock even when a reader
configuration would otherwise use it as a modifier. AltGr, IME/dead keys,
general group/level handling and exact remote autorepeat remain unfinished.
@@ -114,3 +114,15 @@ external Remote race suite, affected-package vet, a separate reader build,
the existing speech regression harness and Tentacles `make check` passed.
No full reader suite, installed-binary behavior,
audible speech, physical input/Braille or live NVDA/Orca acceptance was performed.
## Lock keys (2026-11-06)
Caps Lock, Num Lock and Scroll Lock are now owned like other keys instead of
being refused. Refusal retired all remote input, so a controller using Caps
Lock as its NVDA or Cthulhu modifier lost keyboard control on the first press.
A remote press and release toggles the lock here, as the same physical key
would. Retirement releases a held lock key once and never re-toggles a lock;
when Caps Lock is the controlled reader's Cthulhu modifier, the command owner
keeps its local lock state. A private Xvfb test checks that each lock key is
owned and released at retirement. Lock-state synchronization between computers
is not attempted.