DSWaylandSurfacePrivate::DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr)
: DSObjectPrivate(p_ptr),
__p_ptr(p_ptr),
+ __deleted(false),
__commitInfoPending{std::make_unique<DSWaylandSurfaceCommitInfo>()},
__commitInfo{std::make_shared<DSWaylandSurfaceCommitInfo>()},
__waylandClient(nullptr),
DSWaylandSurfacePrivate::DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr, DSWaylandClient *waylandClient, uint32_t id)
: DSObjectPrivate(p_ptr),
__p_ptr(p_ptr),
+ __deleted(false),
__commitInfoPending{std::make_unique<DSWaylandSurfaceCommitInfo>()},
__commitInfo{std::make_shared<DSWaylandSurfaceCommitInfo>()},
__waylandClient(waylandClient),
void DSWaylandSurfacePrivate::surface_destroy_resource(Resource *resource)
{
+ __sendSurfaceDestroy();
}
void DSWaylandSurfacePrivate::surface_destroy(Resource *resource)
{
- DS_GET_PUB(DSWaylandSurface);
-
- DSWaylandCompositor *dswCompositor = DSWaylandCompositor::getInstance();
- if (dswCompositor)
- {
- dswCompositor->sendSurfaceDestroy(pub);
- }
- DSWaylandCompositor::releaseInstance();
+ __sendSurfaceDestroy();
}
void DSWaylandSurfacePrivate::surface_attach(Resource *resource, struct ::wl_resource *buffer, int32_t x, int32_t y)
commitInfoPendingPriv->damageBuffer.height = height;
}
+void DSWaylandSurfacePrivate::__sendSurfaceDestroy(void)
+{
+ if (__deleted) return;
+
+ DS_GET_PUB(DSWaylandSurface);
+
+ DSWaylandCompositor *dswCompositor = DSWaylandCompositor::getInstance();
+ if (dswCompositor)
+ {
+ dswCompositor->sendSurfaceDestroy(pub);
+ }
+ DSWaylandCompositor::releaseInstance();
+
+ __deleted = true;
+}
+
+
+
DS_WAYLAND_IMPL_FROM_RESOURCE(DSWaylandSurface);
/* DSWaylandSurface */
void surface_damage_buffer(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
private:
+ void __sendSurfaceDestroy(void);
+
+private:
+ bool __deleted;
std::unique_ptr<DSWaylandSurfaceCommitInfo> __commitInfoPending;
std::shared_ptr<DSWaylandSurfaceCommitInfo> __commitInfo;
DSWaylandClient *__waylandClient;