From 0e737901cd4f206d4abed0bcf5cfee4cdd6c23b9 Mon Sep 17 00:00:00 2001 From: Meehir Prabhakar Date: Tue, 18 Aug 2026 22:34:00 +0530 Subject: [PATCH] tests: add fallback focus test for pinned windows on special workspaces (#15826) * tests: add fallback focus test for pinned windows on special workspaces * add comments to the test-case --- hyprtester/src/tests/main/window.cpp | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/hyprtester/src/tests/main/window.cpp b/hyprtester/src/tests/main/window.cpp index 30015acb1..bef607d43 100644 --- a/hyprtester/src/tests/main/window.cpp +++ b/hyprtester/src/tests/main/window.cpp @@ -2000,3 +2000,40 @@ TEST_CASE(floatingForceOnscreen) { #undef WAIT_FOR_WINDOW } + +TEST_CASE(specialWorkspacePinnedWindowUnmapFallback) { + // Test: check if focus falls back to the active special workspace when a pinned window is unmapped + NLog::log("{}Testing special workspace focus fallback on unmap for pinned windows", Colors::GREEN); + + Tests::killAllWindows(); + ASSERT(Tests::windowCount(), 0); + + // Open a window in a workspace + OK(getFromSocket("/dispatch hl.dsp.focus({ workspace = '1'})")); + SPAWN_KITTY("kitty_normal"); + + // Open another window and convert it to a pinned window + SPAWN_KITTY("kitty_pinned"); + OK(getFromSocket("/dispatch hl.dsp.window.float({ action = 'set', window = 'class:kitty_pinned' })")); + OK(getFromSocket("/dispatch hl.dsp.window.pin({ action = 'set', window = 'class:kitty_pinned' })")); + + // Switch to special workspace + OK(getFromSocket("/dispatch hl.dsp.workspace.toggle_special('fallback')")); + + // Open kitty in special workspace + SPAWN_KITTY("kitty_sp_normal"); + + Tests::waitUntilWindowsN(3); + + // Kill the pinned window + OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:kitty_pinned' })")); + OK(getFromSocket("/dispatch hl.dsp.window.kill({ window = 'activewindow' })")); + Tests::waitUntilWindowsN(2); + + // Check if special workspace is still active + const auto active = getFromSocket("/activewindow"); + EXPECT_CONTAINS(active, "(special:fallback)"); + + OK(getFromSocket("/dispatch hl.dsp.workspace.toggle_special('fallback')")); + Tests::killAllWindows(); +}