diff --git a/src/plugins/platforms/wasm/qwasmscreen.cpp b/src/plugins/platforms/wasm/qwasmscreen.cpp index 1ec7d758395..badc5468c8b 100644 --- a/src/plugins/platforms/wasm/qwasmscreen.cpp +++ b/src/plugins/platforms/wasm/qwasmscreen.cpp @@ -330,21 +330,26 @@ QWasmWindowTreeNode *QWasmScreen::parentNode() return nullptr; } -QList QWasmScreen::allWindows() +QList QWasmScreen::allWindows() const { - QList windows; - for (auto *child : childStack()) { - const QWindowList list = child->window()->findChildren(Qt::FindChildrenRecursively); - for (auto child : list) { - auto handle = child->handle(); - if (handle) { - auto wnd = static_cast(handle); - windows.push_back(wnd); - } + QList currentChildren; + QList result; + + for (auto *w : childStack()) + currentChildren << w; + + while (!currentChildren.empty()) { + result << currentChildren; + + QList toIterate; + currentChildren.swap(toIterate); + + for (auto child : toIterate) { + for (auto *w : child->childStack()) + currentChildren << w; } - windows.push_back(child); } - return windows; + return result; } QT_END_NAMESPACE diff --git a/src/plugins/platforms/wasm/qwasmscreen.h b/src/plugins/platforms/wasm/qwasmscreen.h index cf9916b9075..66e7e39d008 100644 --- a/src/plugins/platforms/wasm/qwasmscreen.h +++ b/src/plugins/platforms/wasm/qwasmscreen.h @@ -43,7 +43,7 @@ public: QWasmCompositor *compositor(); QWasmDeadKeySupport *deadKeySupport() { return m_deadKeySupport.get(); } - QList allWindows(); + QList allWindows() const; QRect geometry() const override; int depth() const override;