f32db7247e7562a0d938bde80c39707d36b94200

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

Message

Open windows after selected node (not selected window)

Diff

 1diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
 2index ae203852e2a2dd143753ec2d8f5b543a8ca89f11..2e89ffe3289d3128076a0498cf5231d4218c33ee 100644
 3--- a/src/Hy3Layout.cpp
 4+++ b/src/Hy3Layout.cpp
 5@@ -764,18 +764,33 @@ void Hy3Layout::onWindowCreatedTiling(CWindow* window) {
 6 	auto* monitor = g_pCompositor->getMonitorFromID(window->m_iMonitorID);
 7 
 8 	Hy3Node* opening_into;
 9-	Hy3Node* opening_after;
10+	Hy3Node* opening_after = nullptr;
11 
12-	if (g_pCompositor->m_pLastWindow != nullptr && !g_pCompositor->m_pLastWindow->m_bIsFloating
13-	    && g_pCompositor->m_pLastWindow != window
14-	    && g_pCompositor->m_pLastWindow->m_iWorkspaceID == window->m_iWorkspaceID
15-	    && g_pCompositor->m_pLastWindow->m_bIsMapped)
16-	{
17-		opening_after = this->getNodeFromWindow(g_pCompositor->m_pLastWindow);
18-	} else {
19-		opening_after = this->getNodeFromWindow(
20-		    g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal())
21-		);
22+	if (monitor->activeWorkspace != -1) {
23+		auto* root = this->getWorkspaceRootGroup(monitor->activeWorkspace);
24+
25+		if (root != nullptr) {
26+			opening_after = root->getFocusedNode();
27+
28+			// opening_after->parent cannot be nullptr
29+			if (opening_after == root) {
30+				opening_after = root->data.as_group.focused_child;
31+			}
32+		}
33+	}
34+
35+	if (opening_after == nullptr) {
36+		if (g_pCompositor->m_pLastWindow != nullptr && !g_pCompositor->m_pLastWindow->m_bIsFloating
37+		    && g_pCompositor->m_pLastWindow != window
38+		    && g_pCompositor->m_pLastWindow->m_iWorkspaceID == window->m_iWorkspaceID
39+		    && g_pCompositor->m_pLastWindow->m_bIsMapped)
40+		{
41+			opening_after = this->getNodeFromWindow(g_pCompositor->m_pLastWindow);
42+		} else {
43+			opening_after = this->getNodeFromWindow(
44+			    g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal())
45+			);
46+		}
47 	}
48 
49 	if (opening_after != nullptr && opening_after->workspace_id != window->m_iWorkspaceID) {