wayland/surface: store subsurface transaction in a unique_ptr

This commit is contained in:
Xaver Hugl 2024-01-17 00:12:38 +00:00
parent 6ab8f179a7
commit fd2e77317f
3 changed files with 9 additions and 14 deletions

View file

@ -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();

View file

@ -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>();
}
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

View file

@ -171,7 +171,7 @@ public:
struct
{
SubSurfaceInterface *handle = nullptr;
Transaction *transaction = nullptr;
std::unique_ptr<Transaction> transaction;
} subsurface;
std::vector<std::unique_ptr<PresentationTimeFeedback>> pendingPresentationFeedbacks;