Skip to content

feat(ui): have VoiceOver announce changes made away from the focus - #30

Merged
Timtam merged 3 commits into
Timtam:mainfrom
math65:feat/voiceover-announcements
Oct 6, 2026
Merged

Timtam merged 3 commits into
Timtam:mainfrom
math65:feat/voiceover-announcements

Conversation

@math65

@math65 math65 commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

Stacked on #29 (it reuses the voiceover module added there), so this shows both commits until that one lands.

What changed

VoiceOver reads a control's new label or state only when the user moves to it, so three things RABBIT changes on its own went unheard on macOS. Each is now announced:

  • Dropdowns below the packages list. Ticking a language pack shows the REAPER-language dropdown (or the Spanish variant one), off to the side of the row the user is on. Now: "New choice below the list: REAPER language after installation." / "Choice removed: …".
  • Install progress. The status line moves from package to package while focus sits on the log. The start of each install and configuration step is now spoken, politely (it waits for current speech). Download lines are deliberately not spoken, as they change several times a second.
  • A failed version check. The status line changes while focus stays on the gauge, so the user had no way to hear that the page is now waiting for Back or Close.

The announcement helper gains a priority: the answer to a key press interrupts, news the user didn't ask for waits. A Space toggle folds its dropdown news into its own "Checked" announcement, because a second announcement would cut the first off. A click or VO+Space, which VoiceOver already reads back, gets the dropdown news on its own, after it.

New locale keys in all five languages. On anything other than macOS, announce does nothing.

Testing

Validated on macOS with VoiceOver (fr-FR): dropdowns appearing and disappearing through Space and VO+Space, and a full install run. The version-check failure path compiles, but I couldn't trigger it by hand.

Whether announcements are too chatty is a taste call, so it's easy to drop any one of the three.

🤖 Generated with Claude Code

math65 and others added 3 commits September 25, 2026 19:44
VoiceOver reads a control's new label or state only when the user moves to
it, so three things RABBIT changes on its own went unheard on macOS:

- ticking a package can show or hide the REAPER-language and Spanish
  variant dropdowns below the list, off to the side of the row the user
  is on;
- the progress page's status line moves from package to package while
  focus sits on the log;
- a failed version check rewrites the status line while focus stays on
  the gauge.

Each is now announced through the voiceover module added for Space
toggles, which gains a priority: the answer to a key press interrupts,
news the user didn't ask for waits for current speech. Only the start of
each install and configuration step is spoken, not download lines, which
change several times a second. A Space toggle folds its dropdown news
into the same announcement, since a second one would cut the first off;
a click or VO+Space, which VoiceOver already reads back, gets the
dropdown news on its own, politely.

The packages toggle now returns the dropdown lines instead of a bool;
elsewhere than macOS `announce` does nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
main now has the UI crate split (Timtam#27) and Timtam#29 as merged there, so this
branch's own changes to wx_app.rs are carried into the modules the code
moved to:

- The announce helper and its priority go into wx_app/globals.rs, made
  crate-visible because the progress page, the version check and the Mac
  package list all call it.
- The announcements land in wx_app/progress_ui.rs, wx_app/version_check.rs
  and wx_app/packages_page/dataview.rs; the toggle's new return type drops
  the per-item cfg, as the whole module is macOS-only.
- choice_shown_note moves next to its only caller in dataview.rs: in
  widgets.rs it was dead code on Windows, and it had been placed between
  set_optional_choice_shown and that function's doc comment.

A three-way comparison of every item (base, this branch, main, merged)
found nothing lost. dataview.rs was also type-checked on Windows by
pointing the package page at it: no errors, no warnings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Timtam
Timtam merged commit c07d5bd into Timtam:main Oct 6, 2026
5 checks passed
Timtam added a commit to math65/rabbit that referenced this pull request Oct 6, 2026
…age Enter fix

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

2 participants