summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
diff options
context:
space:
mode:
authorAndre de la Rocha <andre.rocha@qt.io>2021-03-21 04:16:44 +0100
committerAndre de la Rocha <andre.rocha@qt.io>2021-03-25 11:16:21 +0100
commitf1eccab04e01b3acc1a4b4c6a5fe7b3af3e2dcba (patch)
tree8a3dca02d78a8908d591404b5af76a35709f7fea /src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
parent0aae7b95939eb0581d5560136b40ee19fb0c1cde (diff)
Windows QPA: Fix accessibility focus event for table/tree/list
The focused element within a table, tree or list was not being informed in the UI Automation focus change events, causing the focused element to be missed by screen readers. Fixes: QTBUG-91029 Pick-to: 6.0 6.1 5.15 Change-Id: I738502e6871358508b4510763018837c304b618e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Diffstat (limited to 'src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp')
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
index 18becd4ab0..171a3c268b 100644
--- a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
@@ -107,6 +107,17 @@ QWindowsUiaMainProvider::~QWindowsUiaMainProvider()
void QWindowsUiaMainProvider::notifyFocusChange(QAccessibleEvent *event)
{
if (QAccessibleInterface *accessible = event->accessibleInterface()) {
+ // If this is a table/tree/list, raise event for the focused cell/item instead.
+ if (accessible->tableInterface()) {
+ int count = accessible->childCount();
+ for (int i = 0; i < count; ++i) {
+ QAccessibleInterface *item = accessible->child(i);
+ if (item && item->isValid() && item->state().focused) {
+ accessible = item;
+ break;
+ }
+ }
+ }
if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) {
QWindowsUiaWrapper::instance()->raiseAutomationEvent(provider, UIA_AutomationFocusChangedEventId);
}