summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-09-07 01:00:20 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-09-07 01:00:21 +0200
commit295cd87c6d4cb6c9c1222fc565031377e5f33704 (patch)
tree31296727d5fed266d5d894d57827c139cb555108 /src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
parent35ebdeb83eb4057f5e50042747b13d0772051459 (diff)
parent3bac18da8ef9f5750207ddf47192b5db3137c4ac (diff)
Merge remote-tracking branch 'origin/5.11' into 5.12
Diffstat (limited to 'src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp')
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
index 7a91c3d4e2..fbb5c3b9ec 100644
--- a/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
@@ -57,11 +57,25 @@ QWindow *windowForAccessible(const QAccessibleInterface *accessible)
{
QWindow *window = accessible->window();
if (!window) {
- QAccessibleInterface *acc = accessible->parent();
- while (acc && acc->isValid() && !window) {
- window = acc->window();
- QAccessibleInterface *par = acc->parent();
+ const QAccessibleInterface *acc = accessible;
+ const QAccessibleInterface *par = accessible->parent();
+ while (par && par->isValid() && !window) {
+ window = par->window();
acc = par;
+ par = par->parent();
+ }
+ if (!window) {
+ // Workaround for WebEngineView not knowing its parent.
+ const auto appWindows = QGuiApplication::topLevelWindows();
+ for (QWindow *w : appWindows) {
+ if (QAccessibleInterface *root = w->accessibleRoot()) {
+ int count = root->childCount();
+ for (int i = 0; i < count; ++i) {
+ if (root->child(i) == acc)
+ return w;
+ }
+ }
+ }
}
}
return window;