wayland/surface: store subsurface transaction in a unique_ptr
This commit is contained in:
parent
6ab8f179a7
commit
fd2e77317f
3 changed files with 9 additions and 14 deletions
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue