diff options
| author | memchr <118117622+memchr@users.noreply.github.com> | 2023-09-21 23:42:00 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-22 00:42:00 +0100 |
| commit | 1357b66091ecd73f097d19d527a23a9ae72a4ff1 (patch) | |
| tree | e629bedcce584757ebd1afae0dcc12ea25f15c95 /src/layout/DwindleLayout.cpp | |
| parent | 2e1842b5ff140bc81a604c663482221d86c30cff (diff) | |
windowrules: add rule `group` to map windows grouped (#3279)
* windows: add rule group to map windows grouped
* group rule: use `invade` to force open a window in a locked group
Diffstat (limited to 'src/layout/DwindleLayout.cpp')
| -rw-r--r-- | src/layout/DwindleLayout.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 1688b417..fae4af52 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -315,14 +315,21 @@ void CHyprDwindleLayout::onWindowCreatedTiling(CWindow* pWindow, eDirection dire applyNodeDataToWindow(PNODE); + pWindow->applyGroupRules(); + return; } // if it's a group, add the window - if (OPENINGON->pWindow->m_sGroupData.pNextWindow && // target is group - !OPENINGON->pWindow->getGroupHead()->m_sGroupData.locked && // target unlocked - !(pWindow->m_sGroupData.pNextWindow && pWindow->getGroupHead()->m_sGroupData.locked) && // source unlocked or isn't group - !g_pKeybindManager->m_bGroupsLocked && !m_vOverrideFocalPoint) { + if (OPENINGON->pWindow->m_sGroupData.pNextWindow // target is group + && !g_pKeybindManager->m_bGroupsLocked // global group lock disengaged + && ((pWindow->m_eGroupRules & GROUP_INVADE && pWindow->m_bFirstMap) // window ignore local group locks, or + || (!OPENINGON->pWindow->getGroupHead()->m_sGroupData.locked // target unlocked + && !(pWindow->m_sGroupData.pNextWindow && pWindow->getGroupHead()->m_sGroupData.locked))) // source unlocked or isn't group + && !pWindow->m_sGroupData.deny // source is not denied entry + && !(pWindow->m_eGroupRules & GROUP_BARRED && pWindow->m_bFirstMap) // group rule doesn't prevent adding window + && !m_vOverrideFocalPoint // we are not moving window + ) { if (!pWindow->m_sGroupData.pNextWindow) pWindow->m_dWindowDecorations.emplace_back(std::make_unique<CHyprGroupBarDecoration>(pWindow)); @@ -342,6 +349,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(CWindow* pWindow, eDirection dire } OPENINGON->pWindow->setGroupCurrent(pWindow); + pWindow->applyGroupRules(); pWindow->updateWindowDecos(); recalculateWindow(pWindow); @@ -475,6 +483,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(CWindow* pWindow, eDirection dire applyNodeDataToWindow(PNODE); applyNodeDataToWindow(OPENINGON); + pWindow->applyGroupRules(); } void CHyprDwindleLayout::onWindowRemovedTiling(CWindow* pWindow) { |
