diff --git a/src/plugins/platforms/wasm/qwasmwindowstack.cpp b/src/plugins/platforms/wasm/qwasmwindowstack.cpp index cc1a3cad6af..c73ecde9fbe 100644 --- a/src/plugins/platforms/wasm/qwasmwindowstack.cpp +++ b/src/plugins/platforms/wasm/qwasmwindowstack.cpp @@ -111,7 +111,7 @@ QWasmWindow *QWasmWasmWindowStack::rootWindow() const QWasmWindow *QWasmWasmWindowStack::topWindow() const { - return m_windowStack.last(); + return m_windowStack.empty() ? nullptr : m_windowStack.last(); } QWasmWasmWindowStack::StorageType::iterator QWasmWasmWindowStack::regularWindowsBegin() diff --git a/tests/auto/wasm/tst_qwasmwindowstack.cpp b/tests/auto/wasm/tst_qwasmwindowstack.cpp index f978679a15e..62b47bca6db 100644 --- a/tests/auto/wasm/tst_qwasmwindowstack.cpp +++ b/tests/auto/wasm/tst_qwasmwindowstack.cpp @@ -36,6 +36,7 @@ private slots: void lowering(); void removing(); void removingTheRoot(); + void clearing(); private: void onTopWindowChanged() @@ -241,5 +242,31 @@ void tst_QWasmWindowStack::removingTheRoot() getWindowsFrontToBack(&stack).begin())); } +void tst_QWasmWindowStack::clearing() +{ + QWasmWasmWindowStack stack(m_mockCallback); + + stack.pushWindow(&m_root); + stack.pushWindow(&m_window1); + // Window order: 1 R + + clearCallbackCounter(); + + QCOMPARE(&m_window1, stack.topWindow()); + + m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_root); }; + stack.removeWindow(&m_window1); + // Window order: R + verifyTopWindowChangedCalled(); + QCOMPARE(&m_root, stack.topWindow()); + + m_onTopLevelChangedAction = [&stack]() { QVERIFY(stack.topWindow() == nullptr); }; + stack.removeWindow(&m_root); + // Window order: + verifyTopWindowChangedCalled(); + QCOMPARE(nullptr, stack.topWindow()); + QCOMPARE(0u, stack.size()); +} + QTEST_MAIN(tst_QWasmWindowStack) #include "tst_qwasmwindowstack.moc"