f4f72dc96104ba17cf74cce23e81ce452b845bcb

Author
outfoxxed <outfoxxed@outfoxxed.me>
Committer
outfoxxed <outfoxxed@outfoxxed.me>
Date

Message

Fix segfault when shifting a window out of the root node

Diff

 1diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
 2index 10d86d5e3d99673575dff70e5af0f912d3f290eb..ac106b078ae1836d2f5c07d4ff6d86e1e6474e94 100644
 3--- a/src/Hy3Layout.cpp
 4+++ b/src/Hy3Layout.cpp
 5@@ -1442,10 +1442,15 @@ void Hy3Layout::shiftWindow(int workspace, ShiftDirection direction, bool once)
 6 	if (node == nullptr) return;
 7 
 8 	if (once && node->parent != nullptr && node->parent->data.as_group.children.size() == 1) {
 9-		auto* node2 = node->parent;
10-		Hy3Node::swapData(*node, *node2);
11-		node2->layout->nodes.remove(*node);
12-		node2->recalcSizePosRecursive();
13+		if (node->parent->parent == nullptr) {
14+			node->parent->data.as_group.layout = Hy3GroupLayout::SplitH;
15+			node->parent->recalcSizePosRecursive();
16+		} else {
17+			auto* node2 = node->parent;
18+			Hy3Node::swapData(*node, *node2);
19+			node2->layout->nodes.remove(*node);
20+			node2->recalcSizePosRecursive();
21+		}
22 	} else {
23 		this->shiftOrGetFocus(*node, direction, true, once, false);
24 	}