From 8d3b4a21c8ec67d62b683d02512fa790a82e6ea3 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Fri, 6 Oct 2023 11:55:36 +0300 Subject: [PATCH] wayland: Properly update subsurfaces in cached transaction Cached transaction will be merged with parent transaction when the parent surface is committed, it's not included in the transaction graph. --- src/wayland/surface.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/wayland/surface.cpp b/src/wayland/surface.cpp index 5532f2be6d..f137e3fc4a 100644 --- a/src/wayland/surface.cpp +++ b/src/wayland/surface.cpp @@ -63,6 +63,12 @@ void SurfaceInterfacePrivate::addChild(SubSurfaceInterface *child) current->subsurface.above.append(child); pending->subsurface.above.append(child); + if (subsurface.transaction) { + subsurface.transaction->amend(q, [child](SurfaceState *state) { + state->subsurface.above.append(child); + }); + } + for (auto transaction = firstTransaction; transaction; transaction = transaction->next(q)) { transaction->amend(q, [child](SurfaceState *state) { state->subsurface.above.append(child); @@ -90,6 +96,13 @@ void SurfaceInterfacePrivate::removeChild(SubSurfaceInterface *child) pending->subsurface.below.removeAll(child); pending->subsurface.above.removeAll(child); + if (subsurface.transaction) { + subsurface.transaction->amend(q, [child](SurfaceState *state) { + state->subsurface.below.removeOne(child); + state->subsurface.above.removeOne(child); + }); + } + for (auto transaction = firstTransaction; transaction; transaction = transaction->next(q)) { transaction->amend(q, [child](SurfaceState *state) { state->subsurface.below.removeOne(child);