diff --git a/src/helpers/SubsurfaceTree.cpp b/src/helpers/SubsurfaceTree.cpp index 7ec3635a..064ca181 100644 --- a/src/helpers/SubsurfaceTree.cpp +++ b/src/helpers/SubsurfaceTree.cpp @@ -89,6 +89,20 @@ void SubsurfaceTree::destroySurfaceTree(SSurfaceTreeNode* pNode) { pNode->hyprListener_destroy.removeCallback(); pNode->hyprListener_newSubsurface.removeCallback(); + // damage + if (pNode->pSurface) { + wlr_box extents = {}; + wlr_surface_get_extends(pNode->pSurface, &extents); + + int lx = 0, ly = 0; + addSurfaceGlobalOffset(pNode, &lx, &ly); + + extents.x += lx; + extents.y += ly; + + g_pHyprRenderer->damageBox(&extents); + } + surfaceTreeNodes.remove(*pNode); Debug::log(LOG, "SurfaceTree Node removed"); @@ -162,6 +176,8 @@ void Events::listener_unmapSubsurface(void* owner, void* data) { extents.x += lx; extents.y += ly; + g_pHyprRenderer->damageBox(&extents); + SubsurfaceTree::destroySurfaceTree(subsurface->pChild); subsurface->pChild = nullptr; }