From 334a0f03ee2f80118418c16cc06005a1fe8cfd60 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Sat, 10 Feb 2024 00:47:00 +0100 Subject: [PATCH] keybinds: Fix focus not moving along when moving workspace (#4660) --------- Signed-off-by: Sefa Eyeoglu --- src/Compositor.cpp | 3 ++- src/helpers/Monitor.cpp | 4 ++-- src/helpers/Monitor.hpp | 2 +- src/managers/KeybindManager.cpp | 8 ++++++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 69812482..0d336506 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2156,7 +2156,7 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni } Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with existing {}", nextWorkspaceOnMonitorID); - POLDMON->changeWorkspace(nextWorkspaceOnMonitorID); + POLDMON->changeWorkspace(nextWorkspaceOnMonitorID, false, true, true); } // move the workspace @@ -2197,6 +2197,7 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni if (const auto PWORKSPACE = getWorkspaceByID(pMonitor->activeWorkspace); PWORKSPACE) getWorkspaceByID(pMonitor->activeWorkspace)->startAnim(false, false); + setActiveMonitor(pMonitor); pMonitor->activeWorkspace = pWorkspace->m_iID; g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitor->ID); diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index f084d3c0..cb69318f 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -571,8 +571,8 @@ void CMonitor::changeWorkspace(CWorkspace* const pWorkspace, bool internal, bool g_pCompositor->updateSuspendedStates(); } -void CMonitor::changeWorkspace(const int& id, bool internal) { - changeWorkspace(g_pCompositor->getWorkspaceByID(id), internal); +void CMonitor::changeWorkspace(const int& id, bool internal, bool noMouseMove, bool noFocus) { + changeWorkspace(g_pCompositor->getWorkspaceByID(id), internal, noMouseMove, noFocus); } void CMonitor::setSpecialWorkspace(CWorkspace* const pWorkspace) { diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp index 43de8d12..d5aba751 100644 --- a/src/helpers/Monitor.hpp +++ b/src/helpers/Monitor.hpp @@ -142,7 +142,7 @@ class CMonitor { bool isMirror(); float getDefaultScale(); void changeWorkspace(CWorkspace* const pWorkspace, bool internal = false, bool noMouseMove = false, bool noFocus = false); - void changeWorkspace(const int& id, bool internal = false); + void changeWorkspace(const int& id, bool internal = false, bool noMouseMove = false, bool noFocus = false); void setSpecialWorkspace(CWorkspace* const pWorkspace); void setSpecialWorkspace(const int& id); void moveTo(const Vector2D& pos); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index a5419e67..db6bbbbc 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1459,14 +1459,18 @@ void CKeybindManager::exitHyprland(std::string argz) { void CKeybindManager::moveCurrentWorkspaceToMonitor(std::string args) { CMonitor* PMONITOR = g_pCompositor->getMonitorFromString(args); - if (!PMONITOR) + if (!PMONITOR) { + Debug::log(ERR, "Ignoring moveCurrentWorkspaceToMonitor: monitor doesnt exist"); return; + } // get the current workspace const auto PCURRENTWORKSPACE = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastMonitor->activeWorkspace); - if (!PCURRENTWORKSPACE) + if (!PCURRENTWORKSPACE) { + Debug::log(ERR, "moveCurrentWorkspaceToMonitor invalid workspace!"); return; + } g_pCompositor->moveWorkspaceToMonitor(PCURRENTWORKSPACE, PMONITOR); }