diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-04-24 12:04:16 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-04-24 12:04:16 +0200 |
| commit | 3b3718df3d8e8f729980408ac86dffb041a0fcff (patch) | |
| tree | 587315bb554ee28a6f7097c93f99f19c053a3f79 /src/events/Layers.cpp | |
| parent | f04829a4b5aeb8f88aaf25ce7f9b9539b0d91f65 (diff) | |
some fixes for full damage tracking
Diffstat (limited to 'src/events/Layers.cpp')
| -rw-r--r-- | src/events/Layers.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/events/Layers.cpp b/src/events/Layers.cpp index 2b55ece2..8b4e54fb 100644 --- a/src/events/Layers.cpp +++ b/src/events/Layers.cpp @@ -80,6 +80,10 @@ void Events::listener_destroyLayerSurface(void* owner, void* data) { if (PMONITOR) { g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PMONITOR->ID); + + // and damage + wlr_box geomFixed = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height}; + g_pHyprRenderer->damageBox(&geomFixed); } } @@ -95,6 +99,9 @@ void Events::listener_mapLayerSurface(void* owner, void* data) { // fix if it changed its mon const auto PMONITOR = g_pCompositor->getMonitorFromOutput(layersurface->layerSurface->output); + if (!PMONITOR) + return; + if ((uint64_t)layersurface->monitorID != PMONITOR->ID) { const auto POLDMON = g_pCompositor->getMonitorFromID(layersurface->monitorID); POLDMON->m_aLayerSurfaceLists[layersurface->layer].remove(layersurface); @@ -110,6 +117,9 @@ void Events::listener_mapLayerSurface(void* owner, void* data) { g_pCompositor->focusSurface(layersurface->layerSurface->surface); layersurface->position = Vector2D(layersurface->geometry.x, layersurface->geometry.y); + + wlr_box geomFixed = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height}; + g_pHyprRenderer->damageBox(&geomFixed); } void Events::listener_unmapLayerSurface(void* owner, void* data) { @@ -122,6 +132,14 @@ void Events::listener_unmapLayerSurface(void* owner, void* data) { if (layersurface->layerSurface->surface == g_pCompositor->m_pLastFocus) g_pCompositor->m_pLastFocus = nullptr; + + const auto PMONITOR = g_pCompositor->getMonitorFromOutput(layersurface->layerSurface->output); + + if (!PMONITOR) + return; + + wlr_box geomFixed = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height}; + g_pHyprRenderer->damageBox(&geomFixed); } void Events::listener_commitLayerSurface(void* owner, void* data) { @@ -135,6 +153,9 @@ void Events::listener_commitLayerSurface(void* owner, void* data) { if (!PMONITOR) return; + wlr_box geomFixed = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height}; + g_pHyprRenderer->damageBox(&geomFixed); + // fix if it changed its mon if ((uint64_t)layersurface->monitorID != PMONITOR->ID) { const auto POLDMON = g_pCompositor->getMonitorFromID(layersurface->monitorID); @@ -159,5 +180,7 @@ void Events::listener_commitLayerSurface(void* owner, void* data) { layersurface->position = Vector2D(layersurface->geometry.x, layersurface->geometry.y); - g_pHyprRenderer->damageBox(&layersurface->geometry); + // i know i could reuse the last geomFixed box, but this way my stupid linter doesn't give me errors, and for some reason if i do = {...} it does, even though it compiles + wlr_box geomFixedAfter = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height}; + g_pHyprRenderer->damageBox(&geomFixedAfter); }
\ No newline at end of file |
