Feature/accessibility improvements#1777
Open
LuciferM242 wants to merge 13 commits intomoonlight-stream:masterfrom
Open
Feature/accessibility improvements#1777LuciferM242 wants to merge 13 commits intomoonlight-stream:masterfrom
LuciferM242 wants to merge 13 commits intomoonlight-stream:masterfrom
Conversation
Implements comprehensive accessibility support for screen readers including NVDA, JAWS, Narrator, VoiceOver, and Orca. Core Components: - NavigableToolButton: Added accessibleName property and Accessible.Button role - NavigableItemDelegate: Added accessibleName/accessibleDescription for grid items - NavigableMenuItem: Added Accessible.MenuItem role with press action - NavigableDialog: Added Accessible.Dialog role - NavigableMessageDialog: Added accessibility to dialog label Main Views: - main.qml: Added accessibility to window, toolbar, and all toolbar buttons - PcView.qml: Added accessibility to PC grid with dynamic status announcements - AppView.qml: Added accessibility to app grid, Resume/Quit buttons All interactive elements now properly announce their purpose and state to screen reader users. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Adds comprehensive screen reader support to all SettingsView controls: Components: - AutoResizingComboBox: Added accessibleDescription property and ComboBox role Settings Controls (all 33 controls): - All 25 CheckBoxes: Added Accessible.CheckBox role with toggle actions (V-Sync, frame pacing, audio/video settings, input settings, etc.) - All 7 ComboBoxes: Added accessible descriptions (resolution, FPS, audio config, language, decoder, codec) - Bitrate Slider: Added Accessible.Slider role with value announcements All settings are now fully navigable and operable with screen readers. Screen readers announce control names, current values, and checked states. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Implements screen reader support for the streaming lifecycle screens:
StreamSegue.qml:
- Added Accessible.StatusBar to stage label for dynamic connection status
("Starting App...", "Connecting...", etc.)
- Added Accessible.StaticText to hint text for disconnect instructions
QuitSegue.qml:
- Added Accessible.StatusBar to quit status label
(announces "Quitting AppName..." to screen reader users)
Screen readers now announce all connection states and quit progress,
ensuring users are informed throughout the streaming session lifecycle.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add Accessible.name properties to all GroupBox section headers to provide plain text versions for screen readers, avoiding HTML tag announcements. Fixed sections: - Basic Settings - Audio Settings - Host Settings - UI Settings - Input Settings - Gamepad Settings - Advanced Settings Screen readers now announce "Basic Settings grouping" instead of "<font color=skyblue>Basic Settings</font> grouping". 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
bc25574 to
76278fc
Compare
Syncs with 87 upstream commits while preserving all accessibility improvements (Accessible.role, Accessible.name, Accessible.description on all QML components). Resolved conflicts in 6 QML files by keeping both upstream changes and accessibility properties. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds missing accessibility properties found during audit: TextFields (critical - user input): - Add PC dialog: IP address input - Rename PC dialog: name input - Custom resolution dialog: width/height fields - Custom FPS dialog: FPS field ComboBoxes: - Display mode, GUI display mode, keyboard capture mode Buttons & Dialogs: - Bitrate reset button - Dialog buttons in NavigableMessageDialog (affects all dialogs) - NavigableMenu base component Settings labels (plain text for screen readers, no HTML): - Resolution/FPS, bitrate, display mode, audio, language, GUI display mode, video decoder, video codec Other: - PC status header MenuItem in context menu - "No applications found" status label - Title and version labels in main window - Gamepad Mapper toolbar button Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add comprehensive screen reader accessibility support
Summary
This PR implements comprehensive screen reader accessibility for Moonlight Qt, making the application fully usable with NVDA, JAWS, Narrator, VoiceOver, and Orca.
Motivation
I installed Moonlight and discovered it had no accessibility support for screen readers. As someone who relies on screen readers, I wanted to contribute accessibility improvements to make this app usable for the visually impaired community.
Changes Made
Core Components
accessibleNameproperty andAccessible.ButtonroleaccessibleName/accessibleDescriptionproperties for grid itemsAccessible.MenuItemrole with press actionsAccessible.DialogroleMain Views
Settings
accessibleDescriptionproperty andComboBoxroleAccessible.CheckBoxrole with toggle actionsAccessible.Sliderrole with value announcementsStreaming Screens
StatusBarrole for dynamic connection status ("Starting...", "Connecting...", etc.)StatusBarrole for quit progress announcementsTesting
Implementation Details
Accessible.*properties)Files Modified
12 QML files in
app/gui/:Development Notes
Most of this code was written with assistance from Claude Code (Anthropic's AI coding assistant). While I've tested it thoroughly with multiple screen readers, please feel free to edit, modify, or improve any part of this implementation. I'm not claiming ownership of this approach - my only goal is to make Moonlight accessible to the visually impaired community. If you see better ways to implement any of this, please go ahead and make changes directly. I welcome all suggestions, edits, and improvements!
Impact
This PR makes Moonlight Qt fully accessible for blind and visually impaired users, enabling them to:
Thank you for considering this contribution. Feel free to push commits directly to this PR or request changes - I'm flexible and just want to help make Moonlight accessible for everyone!