From 8b12921939a6caae5a0adcac5be37268fd02dc40 Mon Sep 17 00:00:00 2001 From: Sekhat Temporus Date: Wed, 16 Aug 2023 13:28:51 +0100 Subject: [PATCH] update change group to match requested changes --- README.md | 4 +--- src/Hy3Layout.cpp | 58 ++++++++++++++++++++++----------------------- src/Hy3Layout.hpp | 8 +++---- src/Hy3Node.cpp | 15 ++++++------ src/Hy3Node.hpp | 3 ++- src/dispatchers.cpp | 15 ++++-------- 6 files changed, 48 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index 816b481..4516cf8 100644 --- a/README.md +++ b/README.md @@ -215,10 +215,8 @@ plugin { - `hy3:makegroup, , [ephemeral | force_ephemeral]` - make a vertical / horizontal split or tab group - `ephemeral` - the group will be removed once it contains only one node. does not affect existing groups. - `force_ephemeral` - same as ephemeral, but converts existing single windows groups. - - `hy3:changegroup, , [ephemeral | force_ephemeral]` - change the group the node belongs to, to a different layout + - `hy3:changegroup, - change the group the node belongs to, to a different layout - `untab` will untab the group if it was previously tabbed - - `ephemeral` - the group will be removed once it contains only one node. does not affect existing groups. - - `force_ephemeral` - same as ephemeral, but converts existing single windows groups. - `hy3:movefocus, , [visible]` - move the focus left, up, down, or right - `visible` - only move between visible nodes, not hidden tabs - `hy3:movewindow, , [once]` - move a window left, up, down, or right diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp index 134a86f..8d4449f 100644 --- a/src/Hy3Layout.cpp +++ b/src/Hy3Layout.cpp @@ -748,19 +748,21 @@ void Hy3Layout::makeOppositeGroupOnWorkspace(int workspace, GroupEphemeralityOpt void Hy3Layout::changeGroupOnWorkspace( int workspace, - Hy3GroupLayout layout, - GroupEphemeralityOption ephemeral + Hy3GroupLayout layout ) { auto* node = this->getWorkspaceFocusedNode(workspace); - this->changeGroupOn(node, layout, ephemeral); + + if (node == nullptr) return; + + this->changeGroupOn(*node, layout); } -void Hy3Layout::untabGroupOnWorkspace( - int workspace, - GroupEphemeralityOption ephemeral -) { +void Hy3Layout::untabGroupOnWorkspace(int workspace) { auto* node = this->getWorkspaceFocusedNode(workspace); - this->untabGroupOn(node, ephemeral); + + if (node == nullptr) return; + + this->untabGroupOn(*node); } void Hy3Layout::makeGroupOn( @@ -773,7 +775,8 @@ void Hy3Layout::makeGroupOn( if (node->parent != nullptr) { auto& group = node->parent->data.as_group; if (group.children.size() == 1) { - group.updateLayout(layout, ephemeral); + group.setLayout(layout); + group.setEphemeral(ephemeral); node->parent->recalcSizePosRecursive(); return; } @@ -798,7 +801,8 @@ void Hy3Layout::makeOppositeGroupOn( = group.layout == Hy3GroupLayout::SplitH ? Hy3GroupLayout::SplitV : Hy3GroupLayout::SplitH; if (group.children.size() == 1) { - group.updateLayout(layout, ephemeral); + group.setLayout(layout); + group.setEphemeral(ephemeral); node->parent->recalcSizePosRecursive(); return; } @@ -807,32 +811,28 @@ void Hy3Layout::makeOppositeGroupOn( } void Hy3Layout::changeGroupOn( - Hy3Node* node, - Hy3GroupLayout layout, - GroupEphemeralityOption ephemeral + Hy3Node& node, + Hy3GroupLayout layout ) { - if (node == nullptr) return; - - if (node->parent == nullptr) { - makeGroupOn(node, layout, ephemeral); + if (node.parent == nullptr) { + makeGroupOn(&node, layout, GroupEphemeralityOption::Ephemeral); return; } - auto& group = node->parent->data.as_group; - group.updateLayout(layout, ephemeral); - node->parent->recalcSizePosRecursive(); + auto& group = node.parent->data.as_group; + group.setLayout(layout); + node.parent->recalcSizePosRecursive(); } -void Hy3Layout::untabGroupOn(Hy3Node* node, GroupEphemeralityOption ephemeral) { - if (node == nullptr) return; - - if (node->parent == nullptr) return; - - auto& group = node->parent->data.as_group; +void Hy3Layout::untabGroupOn(Hy3Node& node) { + if (node.parent == nullptr) return; + auto& group = node.parent->data.as_group; if (group.layout != Hy3GroupLayout::Tabbed) return; - changeGroupOn(node, group.previous_nontab_layout, ephemeral); + changeGroupOn(node, group.previous_nontab_layout); + + } void Hy3Layout::shiftWindow(int workspace, ShiftDirection direction, bool once) { @@ -842,7 +842,7 @@ void Hy3Layout::shiftWindow(int workspace, ShiftDirection direction, bool once) if (once && node->parent != nullptr && node->parent->data.as_group.children.size() == 1) { if (node->parent->parent == nullptr) { - node->parent->data.as_group.layout = Hy3GroupLayout::SplitH; + node->parent->data.as_group.setLayout(Hy3GroupLayout::SplitH); node->parent->recalcSizePosRecursive(); } else { auto* node2 = node->parent; @@ -1466,7 +1466,7 @@ Hy3Node* Hy3Layout::shiftOrGetFocus( if (group.layout != Hy3GroupLayout::Tabbed && group.children.size() == 2 && std::find(group.children.begin(), group.children.end(), &node) != group.children.end()) { - group.layout = shiftIsVertical(direction) ? Hy3GroupLayout::SplitV : Hy3GroupLayout::SplitH; + group.setLayout(shiftIsVertical(direction) ? Hy3GroupLayout::SplitV : Hy3GroupLayout::SplitH); } else { // wrap the root group in another group this->nodes.push_back({ diff --git a/src/Hy3Layout.hpp b/src/Hy3Layout.hpp index ace2ffe..8d7970e 100644 --- a/src/Hy3Layout.hpp +++ b/src/Hy3Layout.hpp @@ -90,12 +90,12 @@ public: void makeGroupOnWorkspace(int workspace, Hy3GroupLayout, GroupEphemeralityOption); void makeOppositeGroupOnWorkspace(int workspace, GroupEphemeralityOption); - void changeGroupOnWorkspace(int workspace, Hy3GroupLayout, GroupEphemeralityOption); - void untabGroupOnWorkspace(int workspace, GroupEphemeralityOption); + void changeGroupOnWorkspace(int workspace, Hy3GroupLayout); + void untabGroupOnWorkspace(int workspace); void makeGroupOn(Hy3Node*, Hy3GroupLayout, GroupEphemeralityOption); void makeOppositeGroupOn(Hy3Node*, GroupEphemeralityOption); - void changeGroupOn(Hy3Node*, Hy3GroupLayout, GroupEphemeralityOption); - void untabGroupOn(Hy3Node*, GroupEphemeralityOption); + void changeGroupOn(Hy3Node&, Hy3GroupLayout); + void untabGroupOn(Hy3Node&); void shiftWindow(int workspace, ShiftDirection, bool once); void shiftFocus(int workspace, ShiftDirection, bool visible); void changeFocus(int workspace, FocusShift); diff --git a/src/Hy3Node.cpp b/src/Hy3Node.cpp index 084d6a5..d6afc3a 100644 --- a/src/Hy3Node.cpp +++ b/src/Hy3Node.cpp @@ -57,25 +57,26 @@ void Hy3GroupData::collapseExpansions() { } } -void Hy3GroupData::updateLayout( - Hy3GroupLayout layout, - GroupEphemeralityOption ephemeral +void Hy3GroupData::setLayout( + Hy3GroupLayout layout ) { this->layout = layout; if (layout != Hy3GroupLayout::Tabbed) { this->previous_nontab_layout = layout; } +} +void Hy3GroupData::setEphemeral(GroupEphemeralityOption ephemeral) { switch (ephemeral) { - case GroupEphemeralityOption::ForceEphemeral: - this->ephemeral = true; - break; case GroupEphemeralityOption::Standard: this->ephemeral = false; break; + case GroupEphemeralityOption::ForceEphemeral: + this->ephemeral = true; + break; case GroupEphemeralityOption::Ephemeral: - // this->ephemeral stays the same + // no change break; } } diff --git a/src/Hy3Node.hpp b/src/Hy3Node.hpp index 6f38276..fbc0861 100644 --- a/src/Hy3Node.hpp +++ b/src/Hy3Node.hpp @@ -43,7 +43,8 @@ struct Hy3GroupData { bool hasChild(Hy3Node* child); void collapseExpansions(); - void updateLayout(Hy3GroupLayout layout, GroupEphemeralityOption ephemeral); + void setLayout(Hy3GroupLayout layout); + void setEphemeral(GroupEphemeralityOption ephemeral); private: Hy3GroupData(Hy3GroupData&&); diff --git a/src/dispatchers.cpp b/src/dispatchers.cpp index 04b3c11..e35a7ba 100644 --- a/src/dispatchers.cpp +++ b/src/dispatchers.cpp @@ -49,21 +49,14 @@ void dispatch_changegroup(std::string value) { auto args = CVarList(value); - GroupEphemeralityOption ephemeral = GroupEphemeralityOption::Standard; - if (args[1] == "ephemeral") { - ephemeral = GroupEphemeralityOption::Ephemeral; - } else if (args[1] == "force_ephemeral") { - ephemeral = GroupEphemeralityOption::ForceEphemeral; - } - if (args[0] == "h") { - g_Hy3Layout->changeGroupOnWorkspace(workspace, Hy3GroupLayout::SplitH, ephemeral); + g_Hy3Layout->changeGroupOnWorkspace(workspace, Hy3GroupLayout::SplitH); } else if (args[0] == "v") { - g_Hy3Layout->changeGroupOnWorkspace(workspace, Hy3GroupLayout::SplitV, ephemeral); + g_Hy3Layout->changeGroupOnWorkspace(workspace, Hy3GroupLayout::SplitV); } else if (args[0] == "tab") { - g_Hy3Layout->changeGroupOnWorkspace(workspace, Hy3GroupLayout::Tabbed, ephemeral); + g_Hy3Layout->changeGroupOnWorkspace(workspace, Hy3GroupLayout::Tabbed); } else if (args[0] == "untab") { - g_Hy3Layout->untabGroupOnWorkspace(workspace, ephemeral); + g_Hy3Layout->untabGroupOnWorkspace(workspace); } // TODO //else if (args[0] == "opposite") {