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) {