Skip to content

Accessible names for icon-only controls + --overlay-popups flag - #1718

Closed
ionite34 wants to merge 1 commit into
mainfrom
feat/uia-automation-names
Closed

Accessible names for icon-only controls + --overlay-popups flag#1718
ionite34 wants to merge 1 commit into
mainfrom
feat/uia-automation-names

Conversation

@ionite34

Copy link
Copy Markdown
Member

What

Accessible names. UI Automation (and screen readers) saw our icon-only buttons as their content's ToString()"FluentAvalonia.UI.Controls.SymbolIcon", "Avalonia.Controls.StackPanel" — making stop / restart / delete indistinguishable to assistive tech and UI automation. Adds AutomationProperties.Name to:

  • Package card action buttons (more options, check for updates, update, launch options, extensions, launch, stop, restart, console, web UI, import) and Add Package — reusing the existing Resources labels where the button already renders one
  • DocsHelpButton via its control theme (mirrors its tooltip)
  • The NavigationView pane toggle, via a /template/ style selector (FluentAvalonia's template gives it no name)

The main nav items already expose names correctly (ListItem "Inference" etc.) — no changes needed there.

--overlay-popups flag. Renders popups (flyouts, dropdowns, menus) inside the window on Windows — already the default on Linux/macOS. With it, window-scoped screen captures and the window's automation subtree include open popups, instead of popups living in separate top-level HWNDs. Opt-in because popups clip to the window bounds in this mode.

Platform options composition fix. .With<T>() replaces the registered options instance wholesale, so the per-flag new X11PlatformOptions { ... } instances were silently dropping earlier settings — Linux lost OverlayPopups under --disable-gpu-rendering (the branch re-stated WmClass but not OverlayPopups), and macOS lost it under any rendering flag. Options are now composed into one instance per platform and applied once.

Tests

AutomationNameTests (headless): asserts the template-selector style actually reaches the pane toggle — a wrong selector is a silent no-op — and that DocsHelpButton gets its name from the theme. Verified locally: 2/2 pass. Pre-existing MainWindowTests host crash reproduces identically on clean main (unrelated).

Why

Groundwork for driving SM via UI automation (agent-driven release screenshots and feature testing): name-based element lookup replaces vision-based coordinate guessing, and el.bounds() gives exact crop rects for feature close-ups. Same names benefit screen-reader users.

🐺 Generated with Lykos (Fable 5)

UI Automation (and screen readers) saw icon-only buttons as their content's
ToString - "FluentAvalonia.UI.Controls.SymbolIcon" - making them
indistinguishable. Adds AutomationProperties.Name to the package card action
buttons, the DocsHelpButton theme, and the NavigationView pane toggle.

Adds --overlay-popups to render popups inside the window on Windows (already
the default on Linux/macOS), so window captures and the window's automation
subtree include open flyouts and dropdowns.

Platform options are now composed into one instance per platform before
applying: .With<T>() replaces the registered options wholesale, so the
per-flag instances were silently dropping earlier settings (X11 OverlayPopups
under --disable-gpu-rendering, macOS OverlayPopups under any rendering flag).

Co-Authored-By: Lykos (Fable 5) <noreply@lykos.ai>
@ionite34

Copy link
Copy Markdown
Member Author

Moved to the dev-branch flow: superseded by ionite34/StabilityMatrix#1348 (with backport-to-main). 🐺

@ionite34 ionite34 closed this Aug 17, 2026
@ionite34
ionite34 deleted the feat/uia-automation-names branch August 17, 2026 22:42
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 17, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant