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:
1 parent
8e0ac3b258
commit
1c8ec3ce10
4 files changed
+52
-14
No files matched your search
@@ -170,11 +170,16 @@ func TestRemoteKeyLedgerBoundsAndUnavailableKeys(t *testing.T) {
|
||||
if !errors.Is(absent.Apply("a", true), ErrRemoteKeyState) || !errors.Is(absent.Retire(), ErrRemoteKeyState) {
|
||||
t.Fatal("nil ledger accepted work")
|
||||
}
|
||||
for _, name := range []string{"unknown private key", "Caps_Lock", "Num_Lock", "Scroll_Lock"} {
|
||||
ledger, backend := ledgerFixture(t)
|
||||
if err := ledger.Apply(name, true); !errors.Is(err, ErrRemoteKeyUnavailable) || len(backend.effects) != 0 || len(backend.resolves) != 0 {
|
||||
t.Fatal("unsupported key or lock reached the native backend")
|
||||
}
|
||||
ledger, backend := ledgerFixture(t)
|
||||
if err := ledger.Apply("unknown private key", true); !errors.Is(err, ErrRemoteKeyUnavailable) || len(backend.effects) != 0 || len(backend.resolves) != 0 {
|
||||
t.Fatal("unsupported key reached the native backend")
|
||||
}
|
||||
// Lock keys are owned like other keys and released once at retirement.
|
||||
ledger, backend = ledgerFixture(t)
|
||||
backend.codes["Caps_Lock"] = 66
|
||||
applyLedgerKey(t, ledger, "Caps_Lock", true)
|
||||
if err := ledger.Retire(); err != nil || !reflect.DeepEqual(backend.effects, []ledgerTransition{{66, true}, {66, false}}) {
|
||||
t.Fatal("lock key was not owned and released once", err, backend.effects)
|
||||
}
|
||||
for _, code := range []uint16{0, 7, 256, 65535} {
|
||||
ledger, backend := ledgerFixture(t)
|
||||
@@ -183,7 +188,7 @@ func TestRemoteKeyLedgerBoundsAndUnavailableKeys(t *testing.T) {
|
||||
t.Fatal("invalid native code produced an effect")
|
||||
}
|
||||
}
|
||||
ledger, backend := ledgerFixture(t)
|
||||
ledger, backend = ledgerFixture(t)
|
||||
for index := range RemoteHeldKeyLimit {
|
||||
name := string(rune('a' + index))
|
||||
if index >= 26 {
|
||||
|
||||
Reference in new issue
Block a user