Skip to content

Conversation

lucasmerlin
Copy link
Collaborator

@lucasmerlin lucasmerlin commented Jul 17, 2025

Adds an accessibility inspector plugin that shows the current AccessKit tree:

Screen.Recording.2025-07-24.at.11.48.07.mov

Macos has a built in accessibility inspector, but it doesn't seem to work with AccessKit / eframe so this provides some insight into the accesskit state.

This also showed a couple issues that are easy to fix:

  • Links show up as Label instead of links
  • Not all supported actions are advertised (e.g. scrolling)
  • The resize handles in windows shouldn't be focusable
  • Checkbox has no value
  • Menus should have the button as parent widget (not 100% sure on this one)

Currently the plugin lives in the demo app, but I think it should be moved somewhere else. Maybe egui_extras?

This could also be relevant for #4650

@lucasmerlin lucasmerlin changed the title AccessKit inspector / new Plugin trait / group AK nodes by Ui AccessKit inspector / group AccessKit nodes by Ui Jul 23, 2025
@lucasmerlin lucasmerlin changed the base branch from main to lucas/plugin-trait July 23, 2025 09:16
@lucasmerlin lucasmerlin force-pushed the lucas/accessibility-inspector branch from 9d327c8 to 4488bec Compare July 23, 2025 09:29
@lucasmerlin lucasmerlin changed the title AccessKit inspector / group AccessKit nodes by Ui Accessibility inspector plugin Jul 23, 2025
@lucasmerlin lucasmerlin added feature New feature or request accessibility More accessible to e.g. the visually impaired labels Jul 24, 2025
Copy link

github-actions bot commented Jul 24, 2025

Preview available at https://egui-pr-preview.github.io/pr/7368-lucasaccessibility-inspector
Note that it might take a couple seconds for the update to show up after the preview_build workflow has completed.

View snapshot changes at kitdiff

Base automatically changed from lucas/plugin-trait to main September 16, 2025 08:56
# Conflicts:
#	crates/egui/src/context.rs
#	crates/egui/src/plugin.rs
@lucasmerlin lucasmerlin marked this pull request as ready for review October 7, 2025 08:43
Copy link
Owner

@emilk emilk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is really cool!

@lucasmerlin lucasmerlin merged commit 7fc80d8 into main Oct 7, 2025
47 checks passed
@lucasmerlin lucasmerlin deleted the lucas/accessibility-inspector branch October 7, 2025 12:39
lucasmerlin added a commit that referenced this pull request Oct 8, 2025
* closes #5674

This changes egui to create an AccessKit node for each `Ui`. I'm not
sure if this alone will directly improve accessibility, but it should
make it easier to create the correct parent / child relations (e.g.
grouping menus as children of menu buttons).
Instead of having a global stack of parent ids, they are now passed via
a parent_id field in `UiBuilder`.

If having all these `GenericContainer` nodes somehow is bad for
accessibility, the PR could also be changed to only create nodes if
there is actually some accessibility info with it (the relevant is
currently commented-out in the PR). But I think screen readers should
just ignore these nodes, so it should be fine? We could also use this as
motivation to git red of some unnecessary wrapped `Ui`s, e.g.
CentralPanel creates 3 Uis when 2 should be enough (the initial Ui and a
Frame, maybe we could even only show the `Frame` if we can give it an
UiBuilder and somehow show the Frame with `Ui::new`).

Here is a screenshot from the accessibility inspector
(#7368) with this PR:

<img width="431" height="744" alt="Screenshot 2025-07-24 at 12 09 55"
src="https://github.com/user-attachments/assets/6c4e5ff6-5c38-450e-9500-0776c9018d8c"
/>

Without this PR:


https://github.com/user-attachments/assets/270e32fc-9c7a-4dad-8c90-7638c487a602
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

accessibility More accessible to e.g. the visually impaired dev-experience egui exclude from changelog feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants