diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-28 20:46:20 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-28 20:46:20 +0200 |
| commit | bdf1c1619529792e95cd6cf2aa1d68e51db76252 (patch) | |
| tree | c1fc311647342d21ba49707651ce70e654aa7b81 /src/layout/DwindleLayout.cpp | |
| parent | b1b24cb21a36713aa7c8c0d39464504c97423139 (diff) | |
Added IHyprWindowDecoration and Group Bars
Diffstat (limited to 'src/layout/DwindleLayout.cpp')
| -rw-r--r-- | src/layout/DwindleLayout.cpp | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index ef312abd..0f41265b 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -275,6 +275,10 @@ void CHyprDwindleLayout::onWindowCreated(CWindow* pWindow) { if (OPENINGON->pGroupParent) { // means we opened on a group + + // add the group deco + pWindow->m_dWindowDecorations.emplace_back(new CHyprGroupBarDecoration(pWindow)); + PNODE->pGroupParent = OPENINGON->pGroupParent; PNODE->pGroupParent->groupMembers.push_back(PNODE); PNODE->pGroupParent->groupMemberActive = PNODE->pGroupParent->groupMembers.size() - 1; @@ -693,6 +697,10 @@ void CHyprDwindleLayout::toggleWindowGroup(CWindow* pWindow) { for (auto& node : PGROUPPARENT->groupMembers) { node->pGroupParent = nullptr; node->pWindow->m_cRealBorderColor.setValueAndWarp(INACTIVEBORDERCOL); // no anim here because they pop in + + for (auto& wd : node->pWindow->m_dWindowDecorations) { + wd->updateWindow(node->pWindow); + } } PGROUPPARENT->groupMembers.clear(); @@ -725,6 +733,8 @@ void CHyprDwindleLayout::toggleWindowGroup(CWindow* pWindow) { c->pGroupParent = PPARENT; c->pWindow->m_cRealBorderColor = GROUPINACTIVEBORDERCOL; + c->pWindow->m_dWindowDecorations.push_back(new CHyprGroupBarDecoration(c->pWindow)); + if (c->pWindow == g_pCompositor->m_pLastWindow) c->pWindow->m_cRealBorderColor = CColor(g_pConfigManager->getInt("dwindle:col.group_border_active")); } @@ -735,6 +745,31 @@ void CHyprDwindleLayout::toggleWindowGroup(CWindow* pWindow) { } } +std::deque<CWindow*> CHyprDwindleLayout::getGroupMembers(CWindow* pWindow) { + + std::deque<CWindow*> result; + + if (!g_pCompositor->windowExists(pWindow)) + return result; // reject with empty + + // get the node + const auto PNODE = getNodeFromWindow(pWindow); + + if (!PNODE) + return result; // reject with empty + + const auto PGROUPPARENT = PNODE->pGroupParent; + + if (!PGROUPPARENT) + return result; // reject with empty + + for (auto& node : PGROUPPARENT->groupMembers) { + result.push_back(node->pWindow); + } + + return result; +} + void CHyprDwindleLayout::switchGroupWindow(CWindow* pWindow, bool forward) { if (!g_pCompositor->windowValidMapped(pWindow)) return; // reject @@ -760,6 +795,12 @@ void CHyprDwindleLayout::switchGroupWindow(CWindow* pWindow, bool forward) { PNODE->pGroupParent->recalcSizePosRecursive(); + for (auto& gm : PNODE->pGroupParent->groupMembers) { + for (auto& deco : gm->pWindow->m_dWindowDecorations) { + deco->updateWindow(gm->pWindow); + } + } + // focus g_pCompositor->focusWindow(PNODE->pGroupParent->groupMembers[PNODE->pGroupParent->groupMemberActive]->pWindow); } @@ -850,7 +891,7 @@ void CHyprDwindleLayout::alterSplitRatioBy(CWindow* pWindow, float ratio) { PNODE->pParent->recalcSizePosRecursive(); } -void CHyprDwindleLayout::layoutMessage(SLayoutMessageHeader header, std::string message) { +std::any CHyprDwindleLayout::layoutMessage(SLayoutMessageHeader header, std::string message) { if (message == "togglegroup") toggleWindowGroup(header.pWindow); else if (message == "changegroupactivef") @@ -859,6 +900,12 @@ void CHyprDwindleLayout::layoutMessage(SLayoutMessageHeader header, std::string switchGroupWindow(header.pWindow, false); else if (message == "togglesplit") toggleSplit(header.pWindow); + else if (message == "groupinfo") { + auto res = getGroupMembers(g_pCompositor->m_pLastWindow); + return res; + } + + return ""; } void CHyprDwindleLayout::toggleSplit(CWindow* pWindow) { @@ -870,4 +917,8 @@ void CHyprDwindleLayout::toggleSplit(CWindow* pWindow) { PNODE->pParent->splitTop = !PNODE->pParent->splitTop; PNODE->pParent->recalcSizePosRecursive(); +} + +std::string CHyprDwindleLayout::getLayoutName() { + return "dwindle"; }
\ No newline at end of file |
