Skip to content

Windows: Propagate enabled accessibility state - #190507

Merged
auto-submit[bot] merged 2 commits into
flutter:masterfrom
cbracken:a11y-windows-static-reland
Aug 5, 2026
Merged

auto-submit[bot] merged 2 commits into
flutter:masterfrom
cbracken:a11y-windows-static-reland

Conversation

@cbracken

@cbracken cbracken commented Aug 4, 2026 •

Copy link
Copy Markdown
Member

Relands #184501, which was reverted in #186492 because mapping read-only text fields to Role::kTextField caused the macOS embedder to instantiate a FlutterTextPlatformNode for them, producing detached accessibility elements and test crashes.

The underlying macOS issue is now fixed by #190330 and #190353. This relands the remaining bits of #184501. In the common bits of the bridge, read-only text fields now map to Role::kTextField. In the Windows implementation ENABLED_CHANGED and READONLY_CHANGED are dispatched as MSAA kStateChanged events and AXPlatformNodeWin now raises the corresponding UIA_IsEnabledPropertyId change.

Fixes: #184559

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

@cbracken
cbracken requested review from chunhtai and hannah-hyj August 4, 2026 05:39
@cbracken
cbracken requested a review from a team as a code owner August 4, 2026 05:39
@flutter-dashboard flutter-dashboard Bot added the CICD Run CI/CD label Aug 4, 2026
@github-actions github-actions Bot added engine flutter/engine related. See also e: labels. a: accessibility Accessibility, e.g. VoiceOver or TalkBack. (aka a11y) platform-windows Building on or for Windows specifically a: desktop Running on desktop team-windows Owned by the Windows platform team labels Aug 4, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request updates the accessibility bridge to assign the kTextField role to all text fields, including read-only ones, and adds corresponding unit tests. Additionally, the Windows accessibility bridge is updated to dispatch kStateChanged events upon receiving ENABLED_CHANGED or READONLY_CHANGED events. Feedback suggests simplifying the OnAccessibilityEnabledChanged unit test by using the ExpectWinEventFromAXEvent helper function to reduce boilerplate.

Relands flutter#184501, which was reverted in flutter#186492 because mapping read-only
text fields to Role::kTextField caused the macOS embedder to instantiate
a FlutterTextPlatformNode for them, producing detached accessibility
elements and test crashes.

The underlying macOS issue is now fixed by flutter#190330 and flutter#190353. This
relands the remaining bits of flutter#184501. In the common bits of the bridge,
read-only text fields now map to `Role::kTextField`. In the Windows
implementation `ENABLED_CHANGED` and `READONLY_CHANGED` are dispatched
as MSAA `kStateChanged` events and `AXPlatformNodeWin` now raises the
corresponding `UIA_IsEnabledPropertyId` change.

Issue: flutter#184559
@cbracken
cbracken force-pushed the a11y-windows-static-reland branch from c9a2f12 to fde3090 Compare August 4, 2026 06:58
@cbracken
cbracken force-pushed the a11y-windows-static-reland branch from 0e8439b to 91277a3 Compare August 4, 2026 21:42

@hannah-hyj hannah-hyj left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! thank you for fixing this!

@cbracken cbracken added the autosubmit Merge PR when tree becomes green via auto submit App label Aug 4, 2026
@cbracken cbracken changed the title Windows: Propagate the enabled accessibility state (reland) Windows: Propagate the enabled accessibility state Aug 5, 2026
@cbracken cbracken changed the title Windows: Propagate the enabled accessibility state Windows: Propagate enabled accessibility state Aug 5, 2026

@chunhtai chunhtai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM

auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Aug 10, 2026
…12420)

Manual roll requested by [email protected]

flutter/flutter@b766512...27b0988

2026-08-05 [email protected] reland(tool): remove redundant --enable-experiment=record-use flag (flutter/flutter#190591)
2026-08-05 [email protected] Windows: Propagate enabled accessibility state (flutter/flutter#190507)
2026-08-05 [email protected] Roll Fuchsia Test Scripts from ltbuIH9Z3T_yOuigu... to vcANVO8VIDQHasH1X... (flutter/flutter#190589)
2026-08-05 [email protected] Document frozen embedder API structs (flutter/flutter#186842)
2026-08-05 [email protected] Document super call order for State.didChangeDependencies (flutter/flutter#185945)
2026-08-05 [email protected] Move examples of `flutter/widgets` widgets out from `flutter/material` (flutter/flutter#189532)
2026-08-05 [email protected] [web] Use thread local strike caches in skwasm (flutter/flutter#190048)
2026-08-05 [email protected] doc: fix typo in see also section for PrimaryScrollController.maybeOf (flutter/flutter#190386)
2026-08-05 [email protected] Migrate the shell unit tests from legacy Dart native functions to FFI (flutter/flutter#190473)
2026-08-05 [email protected] render proxy box now defaults baseline calculation to null (flutter/flutter#190269)
2026-08-05 [email protected] Update Widgets Localizations from Translation Console (flutter/flutter#190503)
2026-08-04 [email protected] Revert: fix(tool): remove redundant --enable-experiment=record-use flag (flutter/flutter#190583)
2026-08-04 [email protected] Roll Fuchsia Test Scripts from 1frGe_KltAJKkeyPg... to ltbuIH9Z3T_yOuigu... (flutter/flutter#190561)
2026-08-04 [email protected] iOS,macOS: add tsan and ubsan support for Swift (flutter/flutter#190497)
2026-08-04 [email protected] fix: update on_message_ to nullptr after window destroy so that dart gets destroy message  (flutter/flutter#185807)
2026-08-04 [email protected] [flutter_tools] Gracefully handle locked Windows files during clean (flutter/flutter#190095)
2026-08-04 [email protected] iOS,macOS: make Logger thread-safe, conform to Sendable (flutter/flutter#190488)
2026-08-04 [email protected] iOS: Eliminate use of IOSContextNoop in platform view tests (reland) (flutter/flutter#190509)
2026-08-04 [email protected] fix(tool): remove redundant --enable-experiment=record-use flag (flutter/flutter#190475)
2026-08-04 [email protected] android_hardware_smoke_test: Detect blank image failures or EGL initialization warnings and retry (flutter/flutter#190110)
2026-08-04 [email protected] Bumps text gamma on windows to match skia. (flutter/flutter#190477)
2026-08-04 [email protected] Roll Skia from 48b58ee222f1 to a8583a0a2c11 (2 revisions) (flutter/flutter#190537)
2026-08-04 [email protected] [tool][web] Intercept dart2wasm errors & append JS migration footers (flutter/flutter#190476)
2026-08-04 [email protected] [record_use] Migrate IconTreeShaker to `package:record_use` (flutter/flutter#190225)
2026-08-04 [email protected] Handle unexpected exceptions during Azure metadata detection (flutter/flutter#189457)
2026-08-04 [email protected] Fix merge conflict from flutter/flutter#190369 (flutter/flutter#190544)
2026-08-04 [email protected] Prepare device support symbols (flutter/flutter#190369)
2026-08-04 [email protected] Roll Packages from ac87e65 to 3498b9d (1 revision) (flutter/flutter#190532)
2026-08-04 [email protected] Roll Skia from a08d918ebd6a to 48b58ee222f1 (11 revisions) (flutter/flutter#190527)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
@cbracken
cbracken deleted the a11y-windows-static-reland branch August 17, 2026 00:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a: accessibility Accessibility, e.g. VoiceOver or TalkBack. (aka a11y) a: desktop Running on desktop CICD Run CI/CD engine flutter/engine related. See also e: labels. platform-windows Building on or for Windows specifically team-windows Owned by the Windows platform team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Windows][Accessibility] Flutter widgets do not expose enabled/disabled state to windows accessibility infrastructure

3 participants