diff options
Diffstat (limited to 'src/events/Layers.cpp')
| -rw-r--r-- | src/events/Layers.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/events/Layers.cpp b/src/events/Layers.cpp index d5ad2245..7baeda67 100644 --- a/src/events/Layers.cpp +++ b/src/events/Layers.cpp @@ -58,7 +58,12 @@ void Events::listener_destroyLayerSurface(void* owner, void* data) { Debug::log(LOG, "LayerSurface %x destroyed", layersurface->layerSurface); - if (!layersurface->fadingOut) { + const auto PMONITOR = g_pCompositor->getMonitorFromID(layersurface->monitorID); + + if (!g_pCompositor->getMonitorFromID(layersurface->monitorID)) + Debug::log(WARN, "Layersurface destroyed on an invalid monitor (removed?)"); + + if (!layersurface->fadingOut && PMONITOR) { Debug::log(LOG, "Removing LayerSurface that wasn't mapped."); layersurface->alpha.setValueAndWarp(0.f); layersurface->fadingOut = true; @@ -70,8 +75,6 @@ void Events::listener_destroyLayerSurface(void* owner, void* data) { layersurface->hyprListener_unmapLayerSurface.removeCallback(); layersurface->hyprListener_newPopup.removeCallback(); - const auto PMONITOR = g_pCompositor->getMonitorFromID(layersurface->monitorID); - // rearrange to fix the reserved areas if (PMONITOR) { g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); @@ -131,6 +134,11 @@ void Events::listener_unmapLayerSurface(void* owner, void* data) { Debug::log(LOG, "LayerSurface %x unmapped", layersurface->layerSurface); + if (!g_pCompositor->getMonitorFromID(layersurface->monitorID)) { + Debug::log(WARN, "Layersurface unmapping on invalid monitor (removed?) ignoring."); + return; + } + // make a snapshot and start fade g_pHyprOpenGL->makeLayerSnapshot(layersurface); layersurface->alpha = 0.f; |
