diff --git a/src/wayland/subcompositor.cpp b/src/wayland/subcompositor.cpp index 6939eb0278..6d2e867717 100644 --- a/src/wayland/subcompositor.cpp +++ b/src/wayland/subcompositor.cpp @@ -195,8 +195,7 @@ SubSurfaceInterface::~SubSurfaceInterface() if (d->surface) { SurfaceInterfacePrivate *surfacePrivate = SurfaceInterfacePrivate::get(d->surface); surfacePrivate->subsurface.handle = nullptr; - delete surfacePrivate->subsurface.transaction; - surfacePrivate->subsurface.transaction = nullptr; + surfacePrivate->subsurface.transaction.reset(); } } @@ -264,7 +263,7 @@ void SubSurfaceInterface::parentDesynchronized() auto surfacePrivate = SurfaceInterfacePrivate::get(d->surface); if (surfacePrivate->subsurface.transaction) { surfacePrivate->subsurface.transaction->commit(); - surfacePrivate->subsurface.transaction = nullptr; + surfacePrivate->subsurface.transaction.release(); } const auto below = d->surface->below(); diff --git a/src/wayland/surface.cpp b/src/wayland/surface.cpp index 3b632742a8..bffba92067 100644 --- a/src/wayland/surface.cpp +++ b/src/wayland/surface.cpp @@ -344,9 +344,9 @@ void SurfaceInterfacePrivate::surface_commit(Resource *resource) Transaction *transaction; if (sync) { if (!subsurface.transaction) { - subsurface.transaction = new Transaction(); + subsurface.transaction = std::make_unique(); } - transaction = subsurface.transaction; + transaction = subsurface.transaction.get(); } else { transaction = new Transaction(); } @@ -354,17 +354,15 @@ void SurfaceInterfacePrivate::surface_commit(Resource *resource) for (SubSurfaceInterface *subsurface : std::as_const(pending->subsurface.below)) { auto surfacePrivate = SurfaceInterfacePrivate::get(subsurface->surface()); if (surfacePrivate->subsurface.transaction) { - transaction->merge(surfacePrivate->subsurface.transaction); - delete surfacePrivate->subsurface.transaction; - surfacePrivate->subsurface.transaction = nullptr; + transaction->merge(surfacePrivate->subsurface.transaction.get()); + surfacePrivate->subsurface.transaction.reset(); } } for (SubSurfaceInterface *subsurface : std::as_const(pending->subsurface.above)) { auto surfacePrivate = SurfaceInterfacePrivate::get(subsurface->surface()); if (surfacePrivate->subsurface.transaction) { - transaction->merge(surfacePrivate->subsurface.transaction); - delete surfacePrivate->subsurface.transaction; - surfacePrivate->subsurface.transaction = nullptr; + transaction->merge(surfacePrivate->subsurface.transaction.get()); + surfacePrivate->subsurface.transaction.reset(); } } @@ -423,8 +421,6 @@ SurfaceInterface::SurfaceInterface(CompositorInterface *compositor, wl_resource SurfaceInterface::~SurfaceInterface() { - delete d->subsurface.transaction; - d->subsurface.transaction = nullptr; } SurfaceRole *SurfaceInterface::role() const diff --git a/src/wayland/surface_p.h b/src/wayland/surface_p.h index bbfe73431c..8acf1ccaa7 100644 --- a/src/wayland/surface_p.h +++ b/src/wayland/surface_p.h @@ -171,7 +171,7 @@ public: struct { SubSurfaceInterface *handle = nullptr; - Transaction *transaction = nullptr; + std::unique_ptr transaction; } subsurface; std::vector> pendingPresentationFeedbacks;