diff options
author | Andre de la Rocha <andre.rocha@qt.io> | 2021-03-21 04:16:44 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-04-10 15:36:47 +0000 |
commit | 97ee332ee6b95937c78b7cd4dbb5a03120e56f26 (patch) | |
tree | 18ca8fc83dc59aedd6c08bfa31806281eadd2b88 /src | |
parent | ce61defc4d2c611c15eeffd3070a0e71f4373550 (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
Change-Id: I738502e6871358508b4510763018837c304b618e
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
(cherry picked from commit f1eccab04e01b3acc1a4b4c6a5fe7b3af3e2dcba)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp | 11 |
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 1fa72152dd..3adccab9fe 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); } |