Skip to content

KeyTips: plain access-key targets join the root level (compose-both) - #78

Merged
mstrobel merged 1 commit into
developfrom
feat/keytips-plain-targets
Sep 12, 2026
Merged

mstrobel merged 1 commit into
developfrom
feat/keytips-plain-targets

Conversation

@mstrobel

Copy link
Copy Markdown
Owner

Compose-both, as agreed: with the overlay owning Alt whenever a bar exists, a page's own access keys were unreachable (cue suspended while badges show; the access-key stage stands down since #72).

The active scope's plain access-key targets — check boxes, buttons, labels; anything the manager registered that is not inside a badged bar — now join the overlay's root level with their mnemonic as the badge (AccessKeyManager.EligibleTargetsInActiveScope, document order). Inline placement puts the badge where the cue would be and the cue stays suspended, so nothing draws twice.

Collisions go through the one policy: an explicit key wins, colliding auto letters are suffixed — a content letter beside a tab letter (B0 the tab, B1 the check box, document order), and content targets that would multi-match under the manager, which activate directly instead of focus-cycling. Deeper levels stay bar-only, and controls inside a badged bar are not badged again at the root.

Tests (KeyTipPlainTargetTests, four of five fail without the feature): page check box + button badged beside the tab, inline over the mnemonic with the underline cue suspended, toggle/click on activation; tab-vs-content collision both ways; multi-match → suffixes; a label badge focusing its target; bar controls not duplicated at the root. Bars 327 / UI access-key sections green.

🤖 Generated with Claude Code

https://claude.ai/code/session_013qbF5ru6uh5w7fqhP3yoPE

…both)

With the overlay owning Alt whenever a bar exists, a page's own access keys were unreachable: the cue is suspended
while badges show, and (since #72) the access-key stage stands down. The active scope's plain access-key targets —
check boxes, buttons, labels; anything the manager registered that is not inside a badged bar — now join the
overlay's ROOT level with their mnemonic as the badge (AccessKeyManager.EligibleTargetsInActiveScope, document
order). Inline placement puts the badge where the cue would be and the cue stays suspended, so nothing draws twice.
Collisions go through the one policy: an explicit key wins, colliding auto letters are suffixed — a content letter
beside a tab letter (B0 the tab, B1 the check box), and content targets that would multi-match under the manager,
which activate directly instead of focus-cycling. Deeper levels stay bar-only. Controls inside a badged bar are not
badged again at the root. KeyTipPlainTargetTests; design doc §14.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013qbF5ru6uh5w7fqhP3yoPE
@mstrobel
mstrobel merged commit 89d5f83 into develop Sep 12, 2026
3 checks passed
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.

1 participant