diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-15 11:25:42 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-15 11:25:42 +0200 |
| commit | cba4693d390da71c0d4fc743436c455c601fec9d (patch) | |
| tree | 98b110114576edda2fa5afdbd58b52731a2982de /src | |
| parent | deb18af955f5282c1c37a3cfcce85cfbd717d418 (diff) | |
Fix certain layersurfaces crashing
Diffstat (limited to 'src')
| -rw-r--r-- | src/events/Layers.cpp | 17 | ||||
| -rw-r--r-- | src/render/Renderer.cpp | 2 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/events/Layers.cpp b/src/events/Layers.cpp index f9c98585..86e2ca1a 100644 --- a/src/events/Layers.cpp +++ b/src/events/Layers.cpp @@ -58,6 +58,23 @@ void Events::listener_destroyLayerSurface(void* owner, void* data) { Debug::log(LOG, "LayerSurface %x destroyed", layersurface->layerSurface); + if (!layersurface->fadingOut) { + if (layersurface->layerSurface->mapped) { + Debug::log(LOG, "LayerSurface wasn't unmapped, making a snapshot now!"); + + // make a snapshot and start fade + // layersurfaces aren't required to unmap before destroy + g_pHyprOpenGL->makeLayerSnapshot(layersurface); + layersurface->alpha = 0.f; + + layersurface->fadingOut = true; + } else { + Debug::log(LOG, "Removing LayerSurface that wasn't mapped."); + layersurface->alpha.setValueAndWarp(0.f); + layersurface->fadingOut = true; + } + } + if (layersurface->layerSurface->mapped) layersurface->layerSurface->mapped = false; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 8bc5408d..22060e83 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -322,7 +322,7 @@ void CHyprRenderer::arrangeLayerArray(SMonitor* pMonitor, const std::list<SLayer wlr_box full_area = {pMonitor->vecPosition.x, pMonitor->vecPosition.y, pMonitor->vecSize.x, pMonitor->vecSize.y}; for (auto& ls : layerSurfaces) { - if (ls->fadingOut) + if (ls->fadingOut || ls->readyToDelete) continue; const auto PLAYER = ls->layerSurface; |
