From 5c5844cedb938c38ea595957b172c48a67c502fc Mon Sep 17 00:00:00 2001 From: Even Oscar Andersen Date: Sat, 21 Dec 2024 10:36:30 +0100 Subject: [PATCH] Make QWasmScreen::allWindows return all (wasm) windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It seems that findChildren does not return every window if called at an inconvenient time. This causes not all windows to be returned, and later the QWasmCompositor will not detect a valid window to compose, and therefor goes to disabled. Fixes: QTBUG-132414 Pick-to: 6.9 Change-Id: I6c872071751d5a2fbdeea36fb8f4c7e9677fd7d0 Reviewed-by: Morten Johan Sørvig --- src/plugins/platforms/wasm/qwasmscreen.cpp | 29 +++++++++++++--------- src/plugins/platforms/wasm/qwasmscreen.h | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) 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;