summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikolaj Boc <[email protected]>2022-09-12 10:43:07 +0200
committerMikolaj Boc <[email protected]>2022-09-12 20:09:03 +0200
commit91d7dcea1123d32807ba56269004bcd3c9afa202 (patch)
tree5369b6444273e5bef96dff28d73a80fd7eab430c
parent0c1368c7e407d2a7f7814b703c6e6de6a40efa8b (diff)
Fix QWasmWindowStack::topWindow when the stack is empty
The method should by contract return nullptr when the stack is empty, but it crashes in this case. Also, unit-test the case. Pick-to: 6.4 Change-Id: If64b71e761efd9a5cd5af407cd68cba7f8dbc8e2 Reviewed-by: Morten Johan Sørvig <[email protected]>
-rw-r--r--src/plugins/platforms/wasm/qwasmwindowstack.cpp2
-rw-r--r--tests/auto/wasm/tst_qwasmwindowstack.cpp27
2 files changed, 28 insertions, 1 deletions
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: <empty>
+ verifyTopWindowChangedCalled();
+ QCOMPARE(nullptr, stack.topWindow());
+ QCOMPARE(0u, stack.size());
+}
+
QTEST_MAIN(tst_QWasmWindowStack)
#include "tst_qwasmwindowstack.moc"