summaryrefslogtreecommitdiff
path: root/src/events/Layers.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-24 12:04:16 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-24 12:04:16 +0200
commit3b3718df3d8e8f729980408ac86dffb041a0fcff (patch)
tree587315bb554ee28a6f7097c93f99f19c053a3f79 /src/events/Layers.cpp
parentf04829a4b5aeb8f88aaf25ce7f9b9539b0d91f65 (diff)
some fixes for full damage tracking
Diffstat (limited to 'src/events/Layers.cpp')
-rw-r--r--src/events/Layers.cpp25
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