diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 94a0a0c9..82bc6209 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2165,7 +2165,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 @@ -2206,6 +2206,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 3db18058..f32afa63 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 2835bfc3..2d8bd1e8 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1466,14 +1466,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); } diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 7607ce29..079c0336 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -601,12 +601,8 @@ void CInputManager::processMouseDownNormal(wlr_pointer_button_event* e) { const auto mouseCoords = g_pInputManager->getMouseCoordsInternal(); const auto w = g_pCompositor->vectorToWindowUnified(mouseCoords, ALLOW_FLOATING | RESERVED_EXTENTS | INPUT_EXTENTS); - if (w && !m_bLastFocusOnLS) { - if (g_pCompositor->m_pLastWindow != w && **PFOLLOWMOUSE != 3) - g_pCompositor->focusWindow(w); - if (w->checkInputOnDecos(INPUT_TYPE_BUTTON, mouseCoords, e)) - return; - } + if (w && !m_bLastFocusOnLS && w->checkInputOnDecos(INPUT_TYPE_BUTTON, mouseCoords, e)) + return; // clicking on border triggers resize // TODO detect click on LS properly