layer-shell: properly map and unmap surface and propagate unmap events

This commit is contained in:
Vaxry 2024-07-27 18:08:22 +02:00
parent 729b47d46d
commit 0243271544
3 changed files with 7 additions and 0 deletions

View file

@ -119,6 +119,8 @@ void CLayerSurface::onMap() {
mapped = true;
interactivity = layerSurface->current.interactivity;
layerSurface->surface->map();
// this layer might be re-mapped.
fadingOut = false;
g_pCompositor->removeFromFadingOutSafe(self.lock());
@ -190,6 +192,7 @@ void CLayerSurface::onUnmap() {
g_pCompositor->addToFadingOutSafe(self.lock());
mapped = false;
layerSurface->surface->unmap();
startAnimation(false);
return;
@ -201,6 +204,7 @@ void CLayerSurface::onUnmap() {
startAnimation(false);
mapped = false;
layerSurface->surface->unmap();
g_pCompositor->addToFadingOutSafe(self.lock());

View file

@ -38,6 +38,8 @@ CLayerShellResource::CLayerShellResource(SP<CZwlrLayerSurfaceV1> resource_, SP<C
PROTO::layerShell->destroyResource(this);
});
listeners.unmapSurface = surf_->events.unmap.registerListener([this](std::any d) { events.unmap.emit(); });
listeners.commitSurface = surf_->events.commit.registerListener([this](std::any d) {
current = pending;
pending.committed = 0;

View file

@ -70,6 +70,7 @@ class CLayerShellResource : public ISurfaceRole {
struct {
CHyprSignalListener commitSurface;
CHyprSignalListener destroySurface;
CHyprSignalListener unmapSurface;
} listeners;
bool closed = false;