diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 22889efd..4777d31f 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -292,7 +292,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(CWindow* pWindow) { } // if it's a group, add the window - if (OPENINGON->pWindow->m_sGroupData.pNextWindow) { + if (OPENINGON->pWindow->m_sGroupData.pNextWindow && !g_pKeybindManager->m_bGroupsLocked) { m_lDwindleNodesData.remove(*PNODE); OPENINGON->pWindow->insertWindowToGroup(pWindow); diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 5c310ed9..d81093e7 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -87,7 +87,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(CWindow* pWindow) { getNodeFromWindow(g_pCompositor->m_pLastWindow) : getMasterNodeOnWorkspace(pWindow->m_iWorkspaceID); - if (OPENINGON && OPENINGON->pWindow->m_sGroupData.pNextWindow && OPENINGON != PNODE) { + if (OPENINGON && OPENINGON->pWindow->m_sGroupData.pNextWindow && OPENINGON != PNODE && !g_pKeybindManager->m_bGroupsLocked) { m_lMasterNodesData.remove(*PNODE); OPENINGON->pWindow->insertWindowToGroup(pWindow); @@ -242,7 +242,7 @@ void CHyprMasterLayout::calculateWorkspace(const int& ws) { if (getNodesOnWorkspace(PWORKSPACE->m_iID) < 2) { PMASTERNODE->position = PMONITOR->vecReservedTopLeft + PMONITOR->vecPosition; PMASTERNODE->size = Vector2D(PMONITOR->vecSize.x - PMONITOR->vecReservedTopLeft.x - PMONITOR->vecReservedBottomRight.x, - PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PMONITOR->vecReservedTopLeft.y); + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PMONITOR->vecReservedTopLeft.y); applyNodeDataToWindow(PMASTERNODE); return; } else if (PWORKSPACEDATA->orientation == ORIENTATION_LEFT || PWORKSPACEDATA->orientation == ORIENTATION_RIGHT) { diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index b47f8d67..efeb2a07 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -60,6 +60,7 @@ CKeybindManager::CKeybindManager() { m_mDispatchers["bringactivetotop"] = bringActiveToTop; m_mDispatchers["focusurgentorlast"] = focusUrgentOrLast; m_mDispatchers["focuscurrentorlast"] = focusCurrentOrLast; + m_mDispatchers["lockgroups"] = lockGroups; m_tScrollTimer.reset(); } @@ -2032,3 +2033,11 @@ void CKeybindManager::fakeFullscreenActive(std::string args) { g_pCompositor->m_pLastWindow->m_bFakeFullscreenState || g_pCompositor->m_pLastWindow->m_bIsFullscreen); } } + +void CKeybindManager::lockGroups(std::string args) { + if (args == "lock" || args.empty() || args == "lockgroups") { + g_pKeybindManager->m_bGroupsLocked = true; + } else { + g_pKeybindManager->m_bGroupsLocked = false; + } +} diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index 6e31ccd9..3f2debbf 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -25,8 +25,7 @@ struct SKeybind { bool shadowed = false; }; -enum eFocusWindowMode -{ +enum eFocusWindowMode { MODE_CLASS_REGEX = 0, MODE_TITLE_REGEX, MODE_ADDRESS, @@ -55,6 +54,8 @@ class CKeybindManager { wl_event_source* m_pActiveKeybindEventSource = nullptr; + bool m_bGroupsLocked = false; + std::list m_lKeybinds; private: @@ -133,6 +134,7 @@ class CKeybindManager { static void pinActive(std::string); static void mouse(std::string); static void bringActiveToTop(std::string); + static void lockGroups(std::string); friend class CCompositor; friend class CInputManager;