Skip to content

Add accessible names to all interactive controls for VoiceOver (#870)#899

Merged
ten9876 merged 1 commit into
aethersdr:mainfrom
AetherClaude:aetherclaude/issue-870
Apr 7, 2026
Merged

Add accessible names to all interactive controls for VoiceOver (#870)#899
ten9876 merged 1 commit into
aethersdr:mainfrom
AetherClaude:aetherclaude/issue-870

Conversation

@AetherClaude

Copy link
Copy Markdown
Collaborator

Summary

Fixes #870

  • Add setAccessibleName() and setAccessibleDescription() to every interactive widget across 8 GUI files: TitleBar, RxApplet, TxApplet, VfoWidget, AppletPanel, PhoneCwApplet, PhoneApplet, and EqApplet
  • Covers all controls critical for operating the radio: frequency, mode, filter, AGC, AF gain, squelch, RIT/XIT, TX/MOX/TUNE/ATU, RF power, SWR gauge, S-meter, CW speed/delay/pitch, VOX, EQ bands, mic controls, and more
  • Purely additive metadata — zero visual impact, no layout changes, no new visible elements
  • Qt6 bridges QAccessible properties to NSAccessibility automatically on macOS, so VoiceOver will now announce control names and descriptions

This is Phase 1 of the accessibility work outlined in #870. Future phases will add QAccessibleInterface subclasses for custom-painted widgets (panadapter, waterfall, meters) and live announcements for state changes.

Test plan

  • Build passes on Linux, macOS, and Windows CI
  • Visual regression: no visible UI changes (all changes are metadata-only)
  • On macOS with VoiceOver enabled, Tab/VO+arrow through the main window and verify controls announce their names
  • Verify slice controls (mode, frequency, filter, AGC, AF gain) are announced by VoiceOver
  • Verify TX controls (MOX, TUNE, ATU, RF power, SWR gauge) are announced
  • Verify CW controls (speed, delay, pitch, break-in, sidetone) are announced
  • Verify title bar controls (master volume, headphone volume, mute buttons) are announced

🤖 Generated with Claude Code

…rsdr#870)

Add setAccessibleName() and setAccessibleDescription() to every
interactive widget across TitleBar, RxApplet, TxApplet, VfoWidget,
AppletPanel, PhoneCwApplet, PhoneApplet, and EqApplet. This is
Phase 1 of macOS VoiceOver/NSAccessibility support — purely additive
metadata with zero visual impact. Qt6 bridges these properties to
NSAccessibility automatically on macOS.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ten9876 ten9876 marked this pull request as ready for review April 7, 2026 04:37
@ten9876 ten9876 self-requested a review as a code owner April 7, 2026 04:37
@ten9876 ten9876 merged commit fcf31ea into aethersdr:main Apr 7, 2026
5 checks passed
ten9876 added a commit that referenced this pull request Apr 7, 2026
- Add IP validation for Antenna Genius manual connect
- Fix crash from setAccessibleName on null ESC widgets (#899)
ten9876 added a commit that referenced this pull request Apr 7, 2026
- Add IP validation for Antenna Genius manual connect
- Fix crash from setAccessibleName on null ESC widgets (#899)
boydsoftprez pushed a commit to boydsoftprez/AetherSDR that referenced this pull request Apr 7, 2026
…rsdr#870) (aethersdr#899)

Add setAccessibleName() and setAccessibleDescription() to every
interactive widget across TitleBar, RxApplet, TxApplet, VfoWidget,
AppletPanel, PhoneCwApplet, PhoneApplet, and EqApplet. This is
Phase 1 of macOS VoiceOver/NSAccessibility support — purely additive
metadata with zero visual impact. Qt6 bridges these properties to
NSAccessibility automatically on macOS.

Co-authored-by: AetherClaude <aetherclaude@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
boydsoftprez pushed a commit to boydsoftprez/AetherSDR that referenced this pull request Apr 7, 2026
…ethersdr#913)

- Add IP validation for Antenna Genius manual connect
- Fix crash from setAccessibleName on null ESC widgets (aethersdr#899)
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.

macOS build is not accessible with VoiceOver

2 participants