diff --git a/hyprtester/src/tests/main/gestures.cpp b/hyprtester/src/tests/main/gestures.cpp index 9b31cdb6..07cc4ca9 100644 --- a/hyprtester/src/tests/main/gestures.cpp +++ b/hyprtester/src/tests/main/gestures.cpp @@ -160,6 +160,33 @@ static bool test() { // The cursor should have moved because of the gesture EXPECT(cursorPos1 != cursorPos2, true); + // Test that `workspace previous` works correctly after a workspace gesture. + { + OK(getFromSocket("/keyword gestures:workspace_swipe_invert 0")); + OK(getFromSocket("/keyword gestures:workspace_swipe_create_new 1")); + OK(getFromSocket("/dispatch workspace 3")); + + // Come to workspace 5 from workspace 3: 5 will remember that. + OK(getFromSocket("/dispatch workspace 5")); + Tests::spawnKitty(); // Keep workspace 5 open + + // Swipe from 1 to 5: 5 shall remember that. + OK(getFromSocket("/dispatch workspace 1")); + OK(getFromSocket("/dispatch plugin:test:alt 1")); + OK(getFromSocket("/dispatch plugin:test:gesture right,3")); + OK(getFromSocket("/dispatch plugin:test:alt 0")); + EXPECT_CONTAINS(getFromSocket("/activeworkspace"), "ID 5 (5)"); + + // Must return to 1 rather than 3 + OK(getFromSocket("/dispatch workspace previous")); + EXPECT_CONTAINS(getFromSocket("/activeworkspace"), "ID 1 (1)"); + + OK(getFromSocket("/dispatch workspace previous")); + EXPECT_CONTAINS(getFromSocket("/activeworkspace"), "ID 5 (5)"); + + OK(getFromSocket("/dispatch workspace 1")); + } + // kill all NLog::log("{}Killing all windows", Colors::YELLOW); Tests::killAllWindows(); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index a6d7a7e3..46f97d1f 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1391,10 +1391,9 @@ SDispatchResult CKeybindManager::moveActiveToWorkspace(std::string args) { return {.success = false, .error = "Not moving to workspace because it didn't change."}; } - auto pWorkspace = g_pCompositor->getWorkspaceByID(WORKSPACEID); - PHLMONITOR pMonitor = nullptr; - const auto POLDWS = PWINDOW->m_workspace; - static auto PALLOWWORKSPACECYCLES = CConfigValue("binds:allow_workspace_cycles"); + auto pWorkspace = g_pCompositor->getWorkspaceByID(WORKSPACEID); + PHLMONITOR pMonitor = nullptr; + const auto POLDWS = PWINDOW->m_workspace; updateRelativeCursorCoords(); @@ -1419,8 +1418,7 @@ SDispatchResult CKeybindManager::moveActiveToWorkspace(std::string args) { else if (POLDWS->m_isSpecialWorkspace) POLDWS->m_monitor.lock()->setSpecialWorkspace(nullptr); - if (*PALLOWWORKSPACECYCLES) - pWorkspace->rememberPrevWorkspace(POLDWS); + pWorkspace->rememberPrevWorkspace(POLDWS); pMonitor->changeWorkspace(pWorkspace); diff --git a/src/managers/input/UnifiedWorkspaceSwipeGesture.cpp b/src/managers/input/UnifiedWorkspaceSwipeGesture.cpp index 6dae1e63..68ee5b9b 100644 --- a/src/managers/input/UnifiedWorkspaceSwipeGesture.cpp +++ b/src/managers/input/UnifiedWorkspaceSwipeGesture.cpp @@ -292,7 +292,7 @@ void CUnifiedWorkspaceSwipeGesture::end() { pSwitchedTo = PWORKSPACER; } - m_workspaceBegin->rememberPrevWorkspace(pSwitchedTo); + pSwitchedTo->rememberPrevWorkspace(m_workspaceBegin); g_pHyprRenderer->damageMonitor(m_monitor.lock()); @@ -311,4 +311,4 @@ void CUnifiedWorkspaceSwipeGesture::end() { for (auto const& ls : Desktop::focusState()->monitor()->m_layerSurfaceLayers[2]) { *ls->m_alpha = pSwitchedTo->m_hasFullscreenWindow && pSwitchedTo->m_fullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; } -} \ No newline at end of file +}