summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-05-15 11:25:42 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-05-15 11:25:42 +0200
commitcba4693d390da71c0d4fc743436c455c601fec9d (patch)
tree98b110114576edda2fa5afdbd58b52731a2982de /src
parentdeb18af955f5282c1c37a3cfcce85cfbd717d418 (diff)
Fix certain layersurfaces crashing
Diffstat (limited to 'src')
-rw-r--r--src/events/Layers.cpp17
-rw-r--r--src/render/Renderer.cpp2
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;