diff --git a/src/lib/world/clientState/Tiled.ts b/src/lib/world/clientState/Tiled.ts index db11d43..ede20fb 100644 --- a/src/lib/world/clientState/Tiled.ts +++ b/src/lib/world/clientState/Tiled.ts @@ -204,6 +204,7 @@ namespace ClientState { if (config.tiledKeepBelow) { client.kwinClient.keepBelow = true; } + client.kwinClient.keepAbove = false; client.setFullScreen(false); if (client.kwinClient.tile !== null) { client.setMaximize(false, true); // disable quick tile mode diff --git a/src/tests/flows/layering.ts b/src/tests/flows/layering.ts new file mode 100644 index 0000000..b1d0afd --- /dev/null +++ b/src/tests/flows/layering.ts @@ -0,0 +1,115 @@ +tests.register("tiledKeepBelow", 10, () => { + const config = getDefaultConfig(); + config.tiledKeepBelow = true; + config.floatingKeepAbove = false; + const { qtMock, workspaceMock, world } = init(config); + + const pinGeometry = new MockQmlRect(0, 0, 200, screen.height); + + const [client] = workspaceMock.createClients(1); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) !== null); + }); + Assert.assert(client.keepBelow); + Assert.assert(!client.keepAbove); + + qtMock.fireShortcut("karousel-window-toggle-floating"); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) === null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(!client.keepAbove); + + client.pin(pinGeometry); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) === null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(!client.keepAbove); + + client.unpin(); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) === null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(!client.keepAbove); + + qtMock.fireShortcut("karousel-window-toggle-floating"); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) !== null); + }); + Assert.assert(client.keepBelow); + Assert.assert(!client.keepAbove); + + client.pin(pinGeometry); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) === null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(!client.keepAbove); + + qtMock.fireShortcut("karousel-window-toggle-floating"); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) !== null); + }); + Assert.assert(client.keepBelow); + Assert.assert(!client.keepAbove); +}); + +tests.register("floatingKeepAbove", 10, () => { + const config = getDefaultConfig(); + config.tiledKeepBelow = false; + config.floatingKeepAbove = true; + const { qtMock, workspaceMock, world } = init(config); + + const pinGeometry = new MockQmlRect(0, 0, 200, screen.height); + + const [client] = workspaceMock.createClients(1); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) !== null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(!client.keepAbove); + + qtMock.fireShortcut("karousel-window-toggle-floating"); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) === null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(client.keepAbove); + + client.pin(pinGeometry); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) === null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(client.keepAbove); + + client.unpin(); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) === null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(client.keepAbove); + + qtMock.fireShortcut("karousel-window-toggle-floating"); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) !== null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(!client.keepAbove); + + client.pin(pinGeometry); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) === null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(client.keepAbove); + + qtMock.fireShortcut("karousel-window-toggle-floating"); + world.do((clientManager, desktopManager) => { + Assert.assert(clientManager.findTiledWindow(client) !== null); + }); + Assert.assert(!client.keepBelow); + Assert.assert(!client.keepAbove); +});