Diff
1diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
2index ced8dbdf2debc23156601eae2d5aaf885c995305..c250424054279ad55a3dcca613dbcbbdc5d6a0b9 100644
3--- a/src/Hy3Layout.cpp
4+++ b/src/Hy3Layout.cpp
5@@ -557,14 +557,15 @@ bool Hy3Layout::isWindowTiled(CWindow* window) {
6 }
7
8 void Hy3Layout::recalculateMonitor(const int& monitor_id) {
9+ Debug::log(LOG, "Recalculate monitor %d", monitor_id);
10 const auto monitor = g_pCompositor->getMonitorFromID(monitor_id);
11 if (monitor == nullptr) return;
12
13+ g_pHyprRenderer->damageMonitor(monitor);
14+
15 const auto workspace = g_pCompositor->getWorkspaceByID(monitor->activeWorkspace);
16 if (workspace == nullptr) return;
17
18- g_pHyprRenderer->damageMonitor(monitor);
19-
20 if (monitor->specialWorkspaceID) {
21 const auto top_node = this->getWorkspaceRootGroup(monitor->specialWorkspaceID);
22
23@@ -594,9 +595,9 @@ void Hy3Layout::recalculateMonitor(const int& monitor_id) {
24 this->applyNodeDataToWindow(&fakeNode);
25 }
26 } else {
27- const auto top_node = this->getWorkspaceRootGroup(monitor->specialWorkspaceID);
28+ const auto top_node = this->getWorkspaceRootGroup(monitor->activeWorkspace);
29
30- if (top_node) {
31+ if (top_node != nullptr) {
32 top_node->position = monitor->vecPosition + monitor->vecReservedTopLeft;
33 top_node->size = monitor->vecSize - monitor->vecReservedTopLeft - monitor->vecReservedBottomRight;
34 top_node->recalcSizePosRecursive();
35@@ -604,8 +605,10 @@ void Hy3Layout::recalculateMonitor(const int& monitor_id) {
36 }
37 }
38
39-void Hy3Layout::recalculateWindow(CWindow* pWindow) {
40- ; // empty
41+void Hy3Layout::recalculateWindow(CWindow* window) {
42+ auto* node = this->getNodeFromWindow(window);
43+ if (node == nullptr) return;
44+ node->recalcSizePosRecursive();
45 }
46
47 void Hy3Layout::onBeginDragWindow() {
48@@ -873,18 +876,16 @@ std::any Hy3Layout::layoutMessage(SLayoutMessageHeader header, std::string conte
49 return "";
50 }
51
52-SWindowRenderLayoutHints Hy3Layout::requestRenderHints(CWindow* pWindow) {
53- return {};
54+SWindowRenderLayoutHints Hy3Layout::requestRenderHints(CWindow* window) {
55+ return {};
56 }
57
58 void Hy3Layout::switchWindows(CWindow* pWindowA, CWindow* pWindowB) {
59- Debug::log(LOG, "SwitchWindows: %p %p", pWindowA, pWindowB);
60- ; // empty
61+ // todo
62 }
63
64 void Hy3Layout::alterSplitRatio(CWindow* pWindow, float delta, bool exact) {
65- Debug::log(LOG, "AlterSplitRatio: %p %f", pWindow, delta);
66- ; // empty
67+ // todo
68 }
69
70 std::string Hy3Layout::getLayoutName() {
71@@ -892,7 +893,11 @@ std::string Hy3Layout::getLayoutName() {
72 }
73
74 void Hy3Layout::replaceWindowDataWith(CWindow* from, CWindow* to) {
75- ; // empty
76+ auto* node = this->getNodeFromWindow(from);
77+ if (node == nullptr) return;
78+
79+ node->data.as_window = to;
80+ this->applyNodeDataToWindow(node);
81 }
82
83 void Hy3Layout::onEnable() {