diff options
| author | Lee Bousfield <ljbousfield@gmail.com> | 2025-04-16 10:49:01 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-16 17:49:01 +0200 |
| commit | 3fa6320a391ed60779702e058f67649beb787962 (patch) | |
| tree | b5a4aed23a100b236c2e522211285444ea939149 /src/desktop/Subsurface.cpp | |
| parent | 1ae7e2164c25ad4c22698b0ac12969f1e2a1b8ca (diff) | |
desktop: Damage subsurface when position changes (#10094)
Diffstat (limited to 'src/desktop/Subsurface.cpp')
| -rw-r--r-- | src/desktop/Subsurface.cpp | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp index 9846764c..4e77f36f 100644 --- a/src/desktop/Subsurface.cpp +++ b/src/desktop/Subsurface.cpp @@ -115,21 +115,10 @@ void CSubsurface::onCommit() { // I do not think this is correct, but it solves a lot of issues with some apps (e.g. firefox) checkSiblingDamage(); - if (m_vLastSize != m_pWLSurface->resource()->current.size) { - // TODO: fix this - // CBox box{COORDS, m_vLastSize}; - // g_pHyprRenderer->damageBox(box); - // m_vLastSize = m_pWLSurface->resource()->current.size; - // box = {COORDS, m_vLastSize}; - // g_pHyprRenderer->damageBox(box); - - CBox box; - if (m_pPopupParent && !m_pPopupParent->inert() && m_pPopupParent->m_pWLSurface) - box = m_pPopupParent->m_pWLSurface->getSurfaceBoxGlobal().value_or(CBox{}); - else if (m_pWindowParent) - box = m_pWindowParent->getWindowMainSurfaceBox(); - - g_pHyprRenderer->damageBox(box); + if (m_vLastSize != m_pWLSurface->resource()->current.size || m_vLastPosition != m_pSubsurface->position) { + damageLastArea(); + m_vLastSize = m_pWLSurface->resource()->current.size; + m_vLastPosition = m_pSubsurface->position; } } @@ -162,7 +151,8 @@ void CSubsurface::onNewSubsurface(SP<CWLSubsurfaceResource> pSubsurface) { } void CSubsurface::onMap() { - m_vLastSize = m_pWLSurface->resource()->current.size; + m_vLastSize = m_pWLSurface->resource()->current.size; + m_vLastPosition = m_pSubsurface->position; const auto COORDS = coordsGlobal(); CBox box{COORDS, m_vLastSize}; @@ -174,10 +164,7 @@ void CSubsurface::onMap() { } void CSubsurface::onUnmap() { - const auto COORDS = coordsGlobal(); - CBox box{COORDS, m_vLastSize}; - box.expand(4); - g_pHyprRenderer->damageBox(box); + damageLastArea(); if (m_pWLSurface->resource() == g_pCompositor->m_pLastFocus) g_pInputManager->releaseAllMouseButtons(); @@ -187,6 +174,13 @@ void CSubsurface::onUnmap() { // TODO: should this remove children? Currently it won't, only on .destroy } +void CSubsurface::damageLastArea() { + const auto COORDS = coordsGlobal() + m_vLastPosition - m_pSubsurface->position; + CBox box{COORDS, m_vLastSize}; + box.expand(4); + g_pHyprRenderer->damageBox(box); +} + Vector2D CSubsurface::coordsRelativeToParent() { if (!m_pSubsurface) return {}; |
