Diff
1diff --git a/CHANGELOG.md b/CHANGELOG.md
2index 31c6a9661deb11f4eb496a4bda52c1a0f821a7ec..aa889e4d0ca14455c669fb2d665dbb04aebbbc76 100644
3--- a/CHANGELOG.md
4+++ b/CHANGELOG.md
5@@ -2,6 +2,7 @@
6
7 # Upcoming
8 - Fixed IPC and wlr-foreign-toplevel not getting fullscreen and maximize events.
9+- Fixed glitches when moving nodes between monitors with hy3 dispatchers.
10
11 ## hl0.40.0 and before
12
13diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
14index dad84042d679b1bd3ef97a7323c8ab82cb513e34..0bf51150dbf3460b92b1a2cc46b94263fb034f30 100644
15--- a/src/Hy3Layout.cpp
16+++ b/src/Hy3Layout.cpp
17@@ -953,9 +953,12 @@ void changeNodeWorkspaceRecursive(Hy3Node& node, const PHLWORKSPACE& workspace)
18
19 if (node.data.is_window()) {
20 auto window = node.data.as_window();
21+ g_pHyprRenderer->damageWindow(window);
22 window->moveToWorkspace(workspace);
23+ window->m_iMonitorID = workspace->m_iMonitorID;
24 window->updateToplevel();
25 window->updateDynamicRules();
26+ window->uncacheWindowDecos();
27 } else {
28 for (auto* child: node.data.as_group().children) {
29 changeNodeWorkspaceRecursive(*child, workspace);
30@@ -996,6 +999,7 @@ void Hy3Layout::moveNodeToWorkspace(const PHLWORKSPACE& origin, std::string wsna
31 if (focused_window != nullptr
32 && (focused_window_node == nullptr || focused_window->m_bIsFullscreen))
33 {
34+ g_pHyprRenderer->damageWindow(focused_window);
35 g_pCompositor->moveWindowToWorkspaceSafe(focused_window, workspace);
36 } else {
37 if (node == nullptr) return;
38@@ -1015,6 +1019,8 @@ void Hy3Layout::moveNodeToWorkspace(const PHLWORKSPACE& origin, std::string wsna
39
40 changeNodeWorkspaceRecursive(*node, workspace);
41 this->insertNode(*node);
42+ g_pCompositor->updateWorkspaceWindows(origin->m_iID);
43+ g_pCompositor->updateWorkspaceWindows(workspace->m_iID);
44 }
45
46 if (follow) {