summaryrefslogtreecommitdiff
path: root/src/layout/DwindleLayout.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-05-28 20:46:20 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-05-28 20:46:20 +0200
commitbdf1c1619529792e95cd6cf2aa1d68e51db76252 (patch)
treec1fc311647342d21ba49707651ce70e654aa7b81 /src/layout/DwindleLayout.cpp
parentb1b24cb21a36713aa7c8c0d39464504c97423139 (diff)
Added IHyprWindowDecoration and Group Bars
Diffstat (limited to 'src/layout/DwindleLayout.cpp')
-rw-r--r--src/layout/DwindleLayout.cpp53
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