diff options
author | Bernd Weimer <bernd.weimer@qt.io> | 2023-11-21 13:56:38 +0100 |
---|---|---|
committer | Bernd Weimer <bernd.weimer@qt.io> | 2023-11-28 11:39:08 +0100 |
commit | a4d898354a61618cf998569830b426428ab77774 (patch) | |
tree | 203b006f9f27c1d037026a10ecad5cfb95277f6f /tests | |
parent | 86a6f3eb0f7afb4826786dc26cdba257047efd8a (diff) |
Align closing ApplicationManagerWindows
In-process sub-windows would not be closed if a parent was closed.
Out-of-process ApplicationManagerWindows with an Item parent would
end up parentless - for windows only the window hierarchy matters,
items can be neglected.
Change-Id: Ib771eb4661f2fc2828b79efb644988d08e24e5c0
Reviewed-by: Robert Griebl <robert.griebl@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qml/windowmapping/tst_windowmapping.qml | 63 |
1 files changed, 51 insertions, 12 deletions
diff --git a/tests/auto/qml/windowmapping/tst_windowmapping.qml b/tests/auto/qml/windowmapping/tst_windowmapping.qml index 99f7e1ed..cbfb2ca1 100644 --- a/tests/auto/qml/windowmapping/tst_windowmapping.qml +++ b/tests/auto/qml/windowmapping/tst_windowmapping.qml @@ -17,7 +17,7 @@ TestCase { property int spyTimeout: 5000 * AmTest.timeoutFactor property var lastWindowAdded - WindowItem { + component WindowChrome: WindowItem { id: chrome anchors.fill: parent @@ -28,16 +28,16 @@ TestCase { chrome.window = null; } } + } + + WindowChrome { + id: topChrome - WindowItem { + WindowChrome { id: subChrome - anchors.fill: parent - Connections { - target: subChrome.window - function onContentStateChanged() { - if (subChrome.window.contentState === WindowObject.NoSurface) - subChrome.window = null; - } + + WindowChrome { + id: sub2Chrome } } } @@ -47,8 +47,10 @@ TestCase { function onWindowAdded(window) { if (window.windowProperty("type") === "sub") subChrome.window = window; + else if (window.windowProperty("type") === "sub2") + sub2Chrome.window = window; else - chrome.window = window; + topChrome.window = window; testCase.lastWindowAdded = window; } @@ -182,6 +184,43 @@ TestCase { tryCompare(WindowManager, "count", expectedWindowCount, spyTimeout); } + function test_quitOnLastClosed() { + var app = ApplicationManager.application("test.winmap.amwin2"); + + tryCompare(WindowManager, "count", 0, spyTimeout); + app.start("show-main"); + tryCompare(WindowManager, "count", 1, spyTimeout); + compare(app.runState, Am.Running); + topChrome.window.close(); + AmTest.aboutToBlock(); + tryCompare(app, "runState", Am.NotRunning, spyTimeout); + + tryCompare(WindowManager, "count", 0, spyTimeout); + app.start("show-main"); + tryCompare(WindowManager, "count", 1, spyTimeout); + app.start("show-sub"); + tryCompare(WindowManager, "count", 2, spyTimeout); + app.start("show-sub2"); + tryCompare(WindowManager, "count", 3, spyTimeout); + compare(app.runState, Am.Running); + topChrome.window.close(); + AmTest.aboutToBlock(); + tryCompare(app, "runState", Am.NotRunning, spyTimeout); + + tryCompare(WindowManager, "count", 0, spyTimeout); + app.start("show-main"); + tryCompare(WindowManager, "count", 1, spyTimeout); + app.start("show-sub"); + tryCompare(WindowManager, "count", 2, spyTimeout); + tryVerify(function() { return subChrome != null }, spyTimeout); + compare(app.runState, Am.Running); + subChrome.window.close(); + AmTest.aboutToBlock(); + tryCompare(subChrome, "window", null, spyTimeout); + wait(200); + compare(app.runState, Am.Running); + } + function test_default_data() { return [ { tag: "ApplicationManagerWindow", appId: "test.winmap.amwin" }, // skipping QtObject, as it doesn't show anything @@ -196,10 +235,10 @@ TestCase { compare(WindowManager.count, 0); var app = ApplicationManager.application(data.appId); - verify(chrome.window === null); + verify(topChrome.window === null); app.start(); tryCompare(WindowManager, "count", 1, spyTimeout); - tryVerify(function () { return chrome.window !== null }, spyTimeout); + tryVerify(function () { return topChrome.window !== null }, spyTimeout); app.stop(); tryCompare(WindowManager, "count", 0, spyTimeout); |