diff --git a/src/events/Layers.cpp b/src/events/Layers.cpp index cc5d935f0..49b626a0b 100644 --- a/src/events/Layers.cpp +++ b/src/events/Layers.cpp @@ -89,7 +89,7 @@ void Events::listener_destroyLayerSurface(void* owner, void* data) { // rearrange to fix the reserved areas if (PMONITOR) { g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PMONITOR->ID); + PMONITOR->scheduledRecalc = true; // and damage wlr_box geomFixed = {layersurface->geometry.x + PMONITOR->vecPosition.x, layersurface->geometry.y + PMONITOR->vecPosition.y, layersurface->geometry.width, layersurface->geometry.height}; @@ -124,7 +124,7 @@ void Events::listener_mapLayerSurface(void* owner, void* data) { } } layersurface->monitorID = PMONITOR->ID; - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(POLDMON->ID); + PMONITOR->scheduledRecalc = true; g_pHyprRenderer->arrangeLayersForMonitor(POLDMON->ID); } @@ -229,7 +229,7 @@ void Events::listener_commitLayerSurface(void* owner, void* data) { } layersurface->monitorID = PMONITOR->ID; - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(POLDMON->ID); + PMONITOR->scheduledRecalc = true; g_pHyprRenderer->arrangeLayersForMonitor(POLDMON->ID); } @@ -249,7 +249,7 @@ void Events::listener_commitLayerSurface(void* owner, void* data) { g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PMONITOR->ID); + PMONITOR->scheduledRecalc = true; } layersurface->position = Vector2D(layersurface->geometry.x, layersurface->geometry.y); diff --git a/src/events/Monitors.cpp b/src/events/Monitors.cpp index 57da68fcd..44bba5d66 100644 --- a/src/events/Monitors.cpp +++ b/src/events/Monitors.cpp @@ -214,6 +214,11 @@ void Events::listener_monitorFrame(void* owner, void* data) { } // // + if (PMONITOR->scheduledRecalc) { + PMONITOR->scheduledRecalc = false; + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PMONITOR->ID); + } + timespec now; clock_gettime(CLOCK_MONOTONIC, &now); diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp index 937366146..0112aab55 100644 --- a/src/helpers/Monitor.hpp +++ b/src/helpers/Monitor.hpp @@ -31,6 +31,7 @@ struct SMonitor { int framesToSkip = 0; int forceFullFrames = 0; bool noFrameSchedule = false; + bool scheduledRecalc = false; wl_output_transform transform = WL_OUTPUT_TRANSFORM_NORMAL; // for the special workspace