-
Notifications
You must be signed in to change notification settings - Fork 28.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Wire up accessibility bridge in Windows #77838
Comments
Windows does not provide a system notification the embedder can subscribe to to determine when a screen reader or other assistive technology that requires the semantics tree has been enabled. [1] In the absence of such a notification, we watch for queries for the IAccessible COM object representing the root node of the semantics tree, and on receipt of such queries we enable the semantics tree. For the time being, we assume that if accessiblity is enabled, it will be enabled for the duration of the application lifetime. In a future patch we can optimise this by adopting the approach taken by Chromium, which is to disable semantics if we haven't received a query within some reasonable timeout. This patch enables Flutter's semantics tree; a follow-up patch wires in the AccessibilityBridge which maintains the AXTree of COM objects that is the Windows representation of the Flutter SemanticsTree. Issue: flutter/flutter#77838 [1]: https://docs.microsoft.com/en-us/windows/win32/winauto/screen-reader-parameter
Adds method for dispatching a semantics action received from the OS to the matching node in Flutter's semantics tree. Issue: flutter/flutter#77838
Adds method for dispatching a semantics action received from the OS to the matching node in Flutter's semantics tree. Issue: flutter/flutter#77838
Adds method for dispatching a semantics action received from the OS to the matching node in Flutter's semantics tree. Issue: flutter/flutter#77838
Adds method for dispatching a semantics action received from the OS to the matching node in Flutter's semantics tree. Issue: flutter/flutter#77838
Adds method for dispatching a semantics action received from the OS to the matching node in Flutter's semantics tree. Issue: flutter/flutter#77838
Adds method for dispatching a semantics action received from the OS to the matching node in Flutter's semantics tree. Issue: flutter/flutter#77838
Windows does not provide a system notification the embedder can subscribe to to determine when a screen reader or other assistive technology that requires the semantics tree has been enabled. [1] In the absence of such a notification, we watch for queries for the IAccessible COM object representing the root node of the semantics tree, and on receipt of such queries we enable the semantics tree. For the time being, we assume that if accessiblity is enabled, it will be enabled for the duration of the application lifetime. In a future patch we can optimise this by adopting the approach taken by Chromium, which is to disable semantics if we haven't received a query within some reasonable timeout. This patch enables Flutter's semantics tree; a follow-up patch wires in the AccessibilityBridge which maintains the AXTree of COM objects that is the Windows representation of the Flutter SemanticsTree. Issue: flutter/flutter#77838 [1]: https://docs.microsoft.com/en-us/windows/win32/winauto/screen-reader-parameter
Windows does not provide a system notification the embedder can subscribe to to determine when a screen reader or other assistive technology that requires the semantics tree has been enabled. [1] In the absence of such a notification, we watch for queries for the IAccessible COM object representing the root node of the semantics tree, and on receipt of such queries we enable the semantics tree. For the time being, we assume that if accessiblity is enabled, it will be enabled for the duration of the application lifetime. In a future patch we can optimise this by adopting the approach taken by Chromium, which is to disable semantics if we haven't received a query within some reasonable timeout. This patch enables Flutter's semantics tree; a follow-up patch wires in the AccessibilityBridge which maintains the AXTree of COM objects that is the Windows representation of the Flutter SemanticsTree. Issue: flutter/flutter#77838 [1]: https://docs.microsoft.com/en-us/windows/win32/winauto/screen-reader-parameter
Adds method for dispatching a semantics action received from the OS to the matching node in Flutter's semantics tree. Issue: flutter/flutter#77838
Windows does not provide a system notification the embedder can subscribe to to determine when a screen reader or other assistive technology that requires the semantics tree has been enabled. [1] In the absence of such a notification, we watch for queries for the IAccessible COM object representing the root node of the semantics tree, and on receipt of such queries we enable the semantics tree. For the time being, we assume that if accessiblity is enabled, it will be enabled for the duration of the application lifetime. In a future patch we can optimise this by adopting the approach taken by Chromium, which is to disable semantics if we haven't received a query within some reasonable timeout. This patch enables Flutter's semantics tree; a follow-up patch wires in the AccessibilityBridge which maintains the AXTree of COM objects that is the Windows representation of the Flutter SemanticsTree. Issue: flutter/flutter#77838 [1]: https://docs.microsoft.com/en-us/windows/win32/winauto/screen-reader-parameter
This is the third in a series of patches adding accessibility support for the Windows embedder. This patch wires in the Accessibility bridge, and lands the core structure of the Windows FlutterPlatformNodeDelegate and AccessibilityBridgeDelegate classes, including: * Instantiating the AccessibilityBridge when the semantics tree is enabled. * Creating FlutterPlatformNodeDelegate wrappers for semantics tree nodes. * Building and updating the accessibility tree on semantics updates. * Returning the native IAccessible objects when queried. Breaking this out so that the follow-up patches can be reviewed and landed in smaller, independent chunks. Issue: flutter/flutter#77838
This is the third in a series of patches adding accessibility support for the Windows embedder. This patch wires in the Accessibility bridge, and lands the core structure of the Windows FlutterPlatformNodeDelegate and AccessibilityBridgeDelegate classes, including: * Instantiating the AccessibilityBridge when the semantics tree is enabled. * Creating FlutterPlatformNodeDelegate wrappers for semantics tree nodes. * Building and updating the accessibility tree on semantics updates. * Returning the native IAccessible objects when queried. Breaking this out so that the follow-up patches can be reviewed and landed in smaller, independent chunks. Issue: flutter/flutter#77838
This is the third in a series of patches adding accessibility support for the Windows embedder. This patch wires in the Accessibility bridge, and lands the core structure of the Windows FlutterPlatformNodeDelegate and AccessibilityBridgeDelegate classes, including: * Instantiating the AccessibilityBridge when the semantics tree is enabled. * Creating FlutterPlatformNodeDelegate wrappers for semantics tree nodes. * Building and updating the accessibility tree on semantics updates. * Returning the native IAccessible objects when queried. Breaking this out so that the follow-up patches can be reviewed and landed in smaller, independent chunks. Issue: flutter/flutter#77838
This is the third in a series of patches adding accessibility support for the Windows embedder. This patch wires in the Accessibility bridge, and lands the core structure of the Windows FlutterPlatformNodeDelegate and AccessibilityBridgeDelegate classes, including: * Instantiating the AccessibilityBridge when the semantics tree is enabled. * Creating FlutterPlatformNodeDelegate wrappers for semantics tree nodes. * Building and updating the accessibility tree on semantics updates. * Returning the native IAccessible objects when queried. Breaking this out so that the follow-up patches can be reviewed and landed in smaller, independent chunks. Issue: flutter/flutter#77838
This enables unittests for the accessibility bridge in common_cpp_unittests, when running on Windows. Previously, we only tested on macOS. Issue: flutter/flutter#77838
In the Win32 accessibility tree, each AXTree node has an associated IAccessible object. In WindowWin32, our WM_GETOBJECT handler returns the IAccessible associated with the root node of the tree (node 0). On other platforms, we often add our root accessibility object as a subnode of some existing accessibility object associated with the view. On Windows, the root IAccessible _is_ the accessibility object associated with the view (on Windows, and HWND). In the previous implementation, AccessibleObjectFromWindow actually just returns the root IAccessible object, which is equivalent to just returning GetNativeViewAccessible. Instead, we just return null once we hit the root of the tree. Issue: flutter/flutter#77838
The default implementation of GetUniqueId on ui::AXPlatformNodeDelegate always returns ID 1. We had previously implemented this on the windows platform node delegate, but for consistency's sake, and because the default implementation is surprising, we're promoting this to the FlutterPlatformNodeDelegate base class. Issue: flutter/flutter#77838
The default implementation of GetUniqueId on ui::AXPlatformNodeDelegate always returns ID 1. We had previously implemented this on the windows platform node delegate, but for consistency's sake, and because the default implementation is surprising, we're promoting this to the FlutterPlatformNodeDelegate base class. Issue: flutter/flutter#77838
TestAccessibilityBridgeDelegate::accessibility_events previously held values of type ui::AXEventGenerator::TargetedEvent. TargetedEvent contains an AXNode pointer and a const reference to a ui::AXEventGenerator::EventParams object, and as such it's unsafe to make or read copies of TargetedEvent values outside the scope of the AccessibilityBridgeDelegate::OnAccessibilityEvent callback. In this patch, we update the accessibility_events vector to simply hold EventType values since this is the only part of the value we use in our existing tests. If in future we need the full TargetedEvent, we'll need to properly copy these values. This patch also fixes a typo in the accessibility_events identifier and converts an EXPECT_EQ to an ASSERT_EQ in a case where the following test expectations are meaningless/could crash if the accessibility_events size isn't as expected. Issue: flutter/flutter#77838
This enables unittests for the accessibility bridge in common_cpp_unittests, when running on Windows. Previously, we only tested on macOS. Issue: flutter/flutter#77838
This enables unittests for the accessibility bridge in common_cpp_unittests, when running on Windows. Previously, we only tested on macOS. Issue: flutter/flutter#77838
The default implementation of GetUniqueId on ui::AXPlatformNodeDelegate always returns ID 1. We had previously implemented this on the windows platform node delegate, but for consistency's sake, and because the default implementation is surprising, we're promoting this to the FlutterPlatformNodeDelegate base class. Issue: flutter/flutter#77838
This adds support for toggle switches such as the material Switch and CupertinoSwitch widgets. Previously, we added support for checkboxes on desktop platforms, but not for toggle switches. Issue: flutter/flutter#77838
hello, |
Adds support to the common desktop accessibility bridge for widgets that include a semantics node with the `isSlider` flag set. Issue: flutter/flutter#77838
Adds support to the common desktop accessibility bridge for widgets that include a semantics node with the `isSlider` flag set. Issue: flutter/flutter#77838
@voipworld you'll need to be building off the Flutter |
Since this issue is a very generic umbrella issue that focuses on getting the basic wiring in for Windows accessibility support, I'm going to close this as resolved. The cross-platform accessibility bridge in All future accessibility work should be filed as individual bugs covering each specific issue and include repro steps for actual vs expected behaviour. I've linked a couple above; specifically migrating to UI Automation (UIA) APIs in #94782. |
Microsoft Active Accessibility (MSAA) does not include increment/decrement keyboard shortcuts for manipulating sliders and other similar controls. To make up for this, we give the slider keyboard focus when it gains accessibility focus so that the user can use the arrow keys to manipulate the slider. Issue: flutter#77838
Microsoft Active Accessibility (MSAA) does not include increment/decrement keyboard shortcuts for manipulating sliders and other similar controls. To make up for this, we give the slider keyboard focus when it gains accessibility focus so that the user can use the arrow keys to manipulate the slider. Issue: #77838
IAccessible objects should implement accHitTest. Our implementation, in AXPlatformNodeWin, delegates hit testing to AXPlatformNodeDelegate::HitTestSync. Here, we do a quick recursive depth-first walk of the accessibility tree to return the best match. We define the best match as the deepest node in the tree that contains the point under test whose children do not. This also adds a ToScreenPoint() method to FlutterWindowWin32 which avoids a raw Win32 API call, which facilitates mocking out the behaviour of this method in tests. Since we don't have a valid HWND in unittests, ClientToScreen() always returns the point 0,0. Issue: flutter/flutter#77838
IAccessible objects should implement accHitTest. Our implementation, in AXPlatformNodeWin, delegates hit testing to AXPlatformNodeDelegate::HitTestSync. Here, we do a quick recursive depth-first walk of the accessibility tree to return the best match. We define the best match as the deepest node in the tree that contains the point under test whose children do not. Issue: flutter/flutter#77838
IAccessible objects should implement accHitTest. Our implementation, in AXPlatformNodeWin, delegates hit testing to AXPlatformNodeDelegate::HitTestSync. Here, we do a quick recursive depth-first walk of the accessibility tree to return the best match. We define the best match as the deepest node in the tree that contains the point under test whose children do not. Issue: flutter/flutter#77838
IAccessible objects should implement accHitTest. Our implementation, in AXPlatformNodeWin, delegates hit testing to AXPlatformNodeDelegate::HitTestSync. Here, we do a quick recursive depth-first walk of the accessibility tree to return the best match. We define the best match as the deepest node in the tree that contains the point under test whose children do not. Issue: flutter/flutter#77838
This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of |
Make windows use the accessibility library to support the screen reader.
This issue is blocked on #77836
Updating to UI Automation APIs is covered in #94782
The Windows UWP analogue of this issue is #93928.
The text was updated successfully, but these errors were encountered: