Skip to content

Improve compatibility with NVDA screen reader#4677

Draft
YoshiRulz wants to merge 2 commits intoTASEmulators:masterfrom
Lethal-Lawnmower:master
Draft

Improve compatibility with NVDA screen reader#4677
YoshiRulz wants to merge 2 commits intoTASEmulators:masterfrom
Lethal-Lawnmower:master

Conversation

@YoshiRulz
Copy link
Copy Markdown
Member

dev build for branch | Lethal-Lawnmower:master

Lethal-Lawnmower and others added 2 commits March 5, 2026 13:43
This commit adds full NVDA screen reader support for keyboard navigation.

Problem:
- WinForms ToolStrip/MenuStrip controls do not fire MSAA focus events
- Screen readers work with mouse hover but fail with keyboard navigation
- This made BizHawk unusable for blind users

Solution:
- Replace MenuStrip with native Win32 MainMenu (full MSAA support)
- Replace ToolStrip toolbars with ListView controls (native accessibility)
- Add AccessibleName/AccessibleRole to all interactive controls

Changes:
- MainForm: Native menu implementation
- Lua Console: Native menu + ListView toolbar (11 buttons)
- RAM Watch: Native menu + ListView toolbar (14 buttons)
- Hex Editor: Native menu + accessibility properties
- Cheats: Accessibility properties for controls

Documentation:
- docs/ACCESSIBILITY_README.md - User guide
- docs/NativeMenuAccessibility.txt - Full technical documentation

Known limitation: ListView toolbar has slight delay during keyboard
navigation due to screen reader announcement time. This is expected
behavior, not a bug.

Co-Authored-By: Claude <noreply@anthropic.com>
@YoshiRulz YoshiRulz added App: EmuHawk Relating to EmuHawk frontend Meta Relating to code organisation or to things that aren't code labels Apr 12, 2026
@YoshiRulz YoshiRulz linked an issue Apr 12, 2026 that may be closed by this pull request
@YoshiRulz
Copy link
Copy Markdown
Member Author

@Lethal-Lawnmower Please rebase, since I cherry-picked some of your changes already and it's made a merge conflict. It would be nice to have it split into individual commits too.

If the MenuItem stuff is necessary, manually recreating every Form's menu is not a sustainable solution. We could have something like FormBase do it automatically at runtime, or we could do the replacement at design-time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

App: EmuHawk Relating to EmuHawk frontend Meta Relating to code organisation or to things that aren't code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

screen reader accessibility for UI

2 participants