From f4f72dc96104ba17cf74cce23e81ce452b845bcb Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Wed, 28 Jun 2023 12:02:34 -0700 Subject: [PATCH] Fix segfault when shifting a window out of the root node --- src/Hy3Layout.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp index 10d86d5..ac106b0 100644 --- a/src/Hy3Layout.cpp +++ b/src/Hy3Layout.cpp @@ -1442,10 +1442,15 @@ void Hy3Layout::shiftWindow(int workspace, ShiftDirection direction, bool once) if (node == nullptr) return; if (once && node->parent != nullptr && node->parent->data.as_group.children.size() == 1) { - auto* node2 = node->parent; - Hy3Node::swapData(*node, *node2); - node2->layout->nodes.remove(*node); - node2->recalcSizePosRecursive(); + if (node->parent->parent == nullptr) { + node->parent->data.as_group.layout = Hy3GroupLayout::SplitH; + node->parent->recalcSizePosRecursive(); + } else { + auto* node2 = node->parent; + Hy3Node::swapData(*node, *node2); + node2->layout->nodes.remove(*node); + node2->recalcSizePosRecursive(); + } } else { this->shiftOrGetFocus(*node, direction, true, once, false); }