From f079d880b11b710c09d7f128be137278946baa29 Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Fri, 31 Jul 2020 19:21:44 +0900 Subject: [PATCH] DSWaylandSurface: add fromWlResource(), getWlResource() Change-Id: I3107839258ce94d7fb568b72a562070c28cca15f Signed-off-by: Sung-Jin Park --- src/DSWaylandServer/DSWaylandSurface.cpp | 19 +++++++++++++++++++ src/DSWaylandServer/DSWaylandSurface.h | 5 +++++ src/DSWaylandServer/DSWaylandSurfacePrivate.h | 2 ++ 3 files changed, 26 insertions(+) diff --git a/src/DSWaylandServer/DSWaylandSurface.cpp b/src/DSWaylandServer/DSWaylandSurface.cpp index b2da42a..e6c78ca 100644 --- a/src/DSWaylandServer/DSWaylandSurface.cpp +++ b/src/DSWaylandServer/DSWaylandSurface.cpp @@ -163,4 +163,23 @@ void DSWaylandSurface::registerCallbackSurfaceCommitted(DSObject *slot, std::fun this->__surfaceCommittedSignal.connect(slot, func); } +struct ::wl_resource *DSWaylandSurface::getWlResource() +{ + DS_GET_PRIV(DSWaylandSurface); + + return priv->resource()->handle; +} + +static DSWaylandSurfacePrivate *__getPrivatePtrFromWlResource(struct ::wl_resource *resource) +{ + auto rsrc = std::remove_pointer::type::Resource::fromResource(resource); + return rsrc ? reinterpret_cast(rsrc->object()) : nullptr; +} + +DSWaylandSurface *DSWaylandSurface::fromWlResource(struct ::wl_resource *resource) +{ + DSWaylandSurfacePrivate* priv = __getPrivatePtrFromWlResource(resource); + return priv->p_func(); +} + } /* namespace display_server */ diff --git a/src/DSWaylandServer/DSWaylandSurface.h b/src/DSWaylandServer/DSWaylandSurface.h index e439f13..6963a29 100644 --- a/src/DSWaylandServer/DSWaylandSurface.h +++ b/src/DSWaylandServer/DSWaylandSurface.h @@ -6,6 +6,8 @@ #include "DSSignal.h" #include "DSWaylandClient.h" +struct wl_resource; + namespace display_server { @@ -33,6 +35,9 @@ public: // Callback methods void registerCallbackSurfaceCommitted(DSObject *slot, std::function commitInfo)> func); + struct ::wl_resource *getWlResource(); + static DSWaylandSurface *fromWlResource(struct ::wl_resource *resource); + private: // signals DSSignal> __surfaceCommittedSignal; diff --git a/src/DSWaylandServer/DSWaylandSurfacePrivate.h b/src/DSWaylandServer/DSWaylandSurfacePrivate.h index 7ec1267..e2e23c2 100644 --- a/src/DSWaylandServer/DSWaylandSurfacePrivate.h +++ b/src/DSWaylandServer/DSWaylandSurfacePrivate.h @@ -55,6 +55,8 @@ public: struct damageBuffer damageBuffer; }; +struct wl_resource; + class DSWaylandSurfacePrivate : public DSObjectPrivate, public DSWaylandServer::wl_surface { DS_PIMPL_USE_PUBLIC(DSWaylandSurface); -- 2.7.4