Hide inactive tab group windows

This commit is contained in:
outfoxxed 2023-05-31 01:31:22 -07:00
parent 131a51be62
commit 76551a40ef
No known key found for this signature in database
GPG key ID: 4C88A185FB89301E
2 changed files with 48 additions and 11 deletions

View file

@ -130,10 +130,13 @@ void Hy3Node::recalcSizePosRecursive(bool force) {
errorNotif(); errorNotif();
} }
if (child->data.type == Hy3NodeData::Window) {
child->data.as_window->setHidden(false);
}
double distort_out; double distort_out;
double distort_in; double distort_in;
if (gaps_in > gaps_out) { if (gaps_in > gaps_out) {
distort_out = *gaps_out - 1.0; distort_out = *gaps_out - 1.0;
} else { } else {
@ -187,7 +190,13 @@ void Hy3Node::recalcSizePosRecursive(bool force) {
double offset = 0; double offset = 0;
for(auto child: group->children) { if (group->layout == Hy3GroupLayout::Tabbed && group->focused_child != nullptr) {
group->focused_child->setHidden(false);
}
bool hid_focused = false;
for(auto* child: group->children) {
switch (group->layout) { switch (group->layout) {
case Hy3GroupLayout::SplitH: case Hy3GroupLayout::SplitH:
child->position.x = this->position.x + offset; child->position.x = this->position.x + offset;
@ -195,7 +204,8 @@ void Hy3Node::recalcSizePosRecursive(bool force) {
offset += child->size.x; offset += child->size.x;
child->position.y = this->position.y; child->position.y = this->position.y;
child->size.y = this->size.y; child->size.y = this->size.y;
//child->setHidden(false); child->setHidden(false);
child->recalcSizePosRecursive(force);
break; break;
case Hy3GroupLayout::SplitV: case Hy3GroupLayout::SplitV:
child->position.y = this->position.y + offset; child->position.y = this->position.y + offset;
@ -203,19 +213,22 @@ void Hy3Node::recalcSizePosRecursive(bool force) {
offset += child->size.y; offset += child->size.y;
child->position.x = this->position.x; child->position.x = this->position.x;
child->size.x = this->size.x; child->size.x = this->size.x;
//child->setHidden(false); child->setHidden(false);
child->recalcSizePosRecursive(force);
break; break;
case Hy3GroupLayout::Tabbed: case Hy3GroupLayout::Tabbed:
child->position.y = this->position.y + tab_height_offset; child->position.y = this->position.y + tab_height_offset;
child->size.y = this->size.y - tab_height_offset; child->size.y = this->size.y - tab_height_offset;
child->position.x = this->position.x; child->position.x = this->position.x;
child->size.x = this->size.x; child->size.x = this->size.x;
//child->setHidden(group->focused_child != child); bool hidden = group->focused_child != child;
Debug::log(LOG, "set %p hidden: %d", child, hidden);
if (child->isIndirectlyFocused()) hid_focused = true;
child->setHidden(hidden);
if (!hidden) child->recalcSizePosRecursive(force);
break; break;
} }
}
child->recalcSizePosRecursive(force);
}
this->updateTabBar(); this->updateTabBar();
} }
@ -332,6 +345,7 @@ void Hy3Node::focus() {
switch (this->data.type) { switch (this->data.type) {
case Hy3NodeData::Window: case Hy3NodeData::Window:
this->data.as_window->setHidden(false);
g_pCompositor->focusWindow(this->data.as_window); g_pCompositor->focusWindow(this->data.as_window);
break; break;
case Hy3NodeData::Group: case Hy3NodeData::Group:
@ -341,6 +355,28 @@ void Hy3Node::focus() {
} }
} }
bool Hy3Node::focusWindow() {
switch (this->data.type) {
case Hy3NodeData::Window:
this->markFocused();
g_pCompositor->focusWindow(this->data.as_window);
return true;
case Hy3NodeData::Group:
if (this->data.as_group.layout == Hy3GroupLayout::Tabbed) {
if (this->data.as_group.focused_child != nullptr) {
return this->data.as_group.focused_child->focusWindow();
}
} else {
for (auto* node: this->data.as_group.children) {
if (node->focusWindow()) break;
}
}
return false;
}
}
void Hy3Node::raiseToTop() { void Hy3Node::raiseToTop() {
switch (this->data.type) { switch (this->data.type) {
case Hy3NodeData::Window: case Hy3NodeData::Window:
@ -1309,7 +1345,7 @@ void Hy3Layout::shiftFocus(int workspace, ShiftDirection direction) {
Hy3Node* target; Hy3Node* target;
if ((target = this->shiftOrGetFocus(*node, direction, false, false))) { if ((target = this->shiftOrGetFocus(*node, direction, false, false))) {
g_pCompositor->focusWindow(target->data.as_window); target->focus();
} }
} }
@ -1498,7 +1534,7 @@ Hy3Node* Hy3Layout::shiftOrGetFocus(Hy3Node& node, ShiftDirection direction, boo
target_parent = target_parent->parent; target_parent = target_parent->parent;
} }
node.markFocused(); node.focus();
if (target_parent != target_group && target_parent != nullptr) if (target_parent != target_group && target_parent != nullptr)
target_parent->recalcSizePosRecursive(); target_parent->recalcSizePosRecursive();

View file

@ -78,6 +78,7 @@ struct Hy3Node {
std::string debugNode(); std::string debugNode();
void markFocused(); void markFocused();
void focus(); void focus();
bool focusWindow();
void raiseToTop(); void raiseToTop();
Hy3Node* getFocusedNode(); Hy3Node* getFocusedNode();
void updateDecos(); void updateDecos();