Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

lucasmerlin
Copy link
Collaborator

@lucasmerlin lucasmerlin commented Jul 23, 2025

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 Uis, 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:

Screenshot 2025-07-24 at 12 09 55

Without this PR:

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

@lucasmerlin lucasmerlin changed the base branch from main to lucas/accessibility-inspector July 23, 2025 09:32
@lucasmerlin lucasmerlin force-pushed the lucas/group-accesskit-nodes-by-ui branch from 0f9886d to c1d8d10 Compare July 23, 2025 09:33
@lucasmerlin lucasmerlin added this to the 0.33.0 milestone Oct 6, 2025
# Conflicts:
#	crates/egui/src/context.rs
#	crates/egui/src/plugin.rs
…it-nodes-by-ui

# Conflicts:
#	crates/egui/src/containers/window.rs
#	crates/egui_demo_app/src/accessibility_inspector.rs
@lucasmerlin lucasmerlin marked this pull request as ready for review October 7, 2025 09:04
@lucasmerlin lucasmerlin added the do-not-merge Do not merge yet, but you can still review it label Oct 7, 2025
@emilk emilk requested review from Copilot and emilk October 7, 2025 09:42
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR refactors egui's accessibility system to create AccessKit nodes for each Ui rather than using a global parent stack. This change aims to improve accessibility by providing better parent-child relationships between UI elements.

Key changes:

  • Replaces global accessibility parent stack with per-UI parent assignment via UiBuilder
  • Creates AccessKit nodes with GenericContainer role for all Ui instances
  • Updates accessibility parent registration to use explicit parent-child mapping

Reviewed Changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated no comments.

Show a summary per file
File Description
crates/egui/src/ui_builder.rs Adds accessibility_parent field and method to UiBuilder
crates/egui/src/ui.rs Updates Ui creation to register accessibility parents and create AccessKit nodes
crates/egui/src/context.rs Replaces parent stack with parent mapping system and removes with_accessibility_parent method
crates/egui/src/pass_state.rs Changes AccessKitPassState to use parent/child maps instead of parent stack
crates/egui/src/response.rs Adds Panel widget type mapping to AccessKit role
crates/egui/src/lib.rs Adds Panel widget type enum variant
crates/egui/src/data/output.rs Adds string representation for Panel widget type
crates/egui/src/containers/window.rs Updates window resize interaction to use new accessibility parent system
crates/egui/src/containers/panel.rs Adds panel widget info registration
crates/egui/src/containers/area.rs Sets accessibility parent for area content UI
crates/egui/src/text_selection/accesskit_text.rs Updates text widget accessibility to use new parent registration
crates/egui_demo_app/src/accessibility_inspector.rs Removes usage of deprecated with_accessibility_parent method
Comments suppressed due to low confidence (1)

crates/egui/src/context.rs:1

  • Large commented-out code block should be removed. If this code is needed for reference or future implementation, consider moving it to a separate document or issue tracker.
#![warn(missing_docs)] // Let's keep `Context` well-documented.

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment on lines +205 to +206
#[cfg(feature = "accesskit")]
ui.ctx().accesskit_node_builder(ui.unique_id, |node| {
Copy link
Owner

Choose a reason for hiding this comment

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

I think it's time we remove the "accesskit" feature, and just always depend on accesskit:

That is: replace the compile-time flag with a runtime flag. (not in this PR though)

Base automatically changed from lucas/accessibility-inspector to main October 7, 2025 12:39
…it-nodes-by-ui

# Conflicts:
#	crates/egui_demo_app/src/accessibility_inspector.rs
# Conflicts:
#	Cargo.toml
#	crates/egui/src/containers/panel.rs
#	crates/egui_demo_app/src/accessibility_inspector.rs
@lucasmerlin lucasmerlin removed the do-not-merge Do not merge yet, but you can still review it label Oct 8, 2025
@lucasmerlin lucasmerlin merged commit 3fdc564 into main Oct 8, 2025
47 checks passed
@lucasmerlin lucasmerlin deleted the lucas/group-accesskit-nodes-by-ui branch October 8, 2025 09:30
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 egui

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Automatically add the parent Ui as accesskit parent

2 participants