DSWaylandCompositor/DSWaylandSurface: add API to get surface by resource ID 98/242098/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Sat, 22 Aug 2020 07:44:55 +0000 (16:44 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Mon, 24 Aug 2020 06:32:16 +0000 (15:32 +0900)
Change-Id: I1946ac7b360cce6b22693c547cbf97aec3cab29a

src/DSWaylandServer/DSWaylandCompositor.cpp
src/DSWaylandServer/DSWaylandCompositor.h
src/DSWaylandServer/DSWaylandSurface.cpp
src/DSWaylandServer/DSWaylandSurface.h
src/DSWaylandServer/DSWaylandSurfacePrivate.h

index 1570727..f09ef05 100644 (file)
@@ -506,6 +506,19 @@ IDSWaylandShell *DSWaylandCompositor::getShell(void)
        return priv->getShell();
 }
 
+DSWaylandSurface *DSWaylandCompositor::getSurface(uint32_t id)
+{
+       for (auto s : __surfaceList)
+       {
+               if (s->getResourceId() == id)
+               {
+                       return s.get();
+               }
+       }
+
+       return nullptr;
+}
+
 void DSWaylandCompositor::sendSurfaceDestroy(DSWaylandSurface *dswSurface)
 {
        for (auto s : __surfaceList)
index c8ae82f..b350f48 100644 (file)
@@ -67,6 +67,8 @@ public:
        bool setShell(IDSWaylandShell *shell);
        IDSWaylandShell *getShell(void);
 
+       DSWaylandSurface *getSurface(uint32_t id);
+
        void sendSurfaceDestroy(DSWaylandSurface *dswSurface);
        void regionDestroy(DSWaylandRegion *dswRegion);
 
index 54996ba..473e3a0 100644 (file)
@@ -69,7 +69,8 @@ DSWaylandSurfacePrivate::DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr)
          __p_ptr(p_ptr),
          __commitInfoPending{std::make_unique<DSWaylandSurfaceCommitInfo>()},
          __commitInfo{std::make_shared<DSWaylandSurfaceCommitInfo>()},
-         __bufferManager{DSBufferManager::getInstance()}
+         __bufferManager{DSBufferManager::getInstance()},
+         __resId(0)
 {}
 
 DSWaylandSurfacePrivate::DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr, DSWaylandClient *waylandClient, uint32_t id)
@@ -77,10 +78,12 @@ DSWaylandSurfacePrivate::DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr, DSWayl
          __p_ptr(p_ptr),
          __commitInfoPending{std::make_unique<DSWaylandSurfaceCommitInfo>()},
          __commitInfo{std::make_shared<DSWaylandSurfaceCommitInfo>()},
-         __bufferManager{DSBufferManager::getInstance()}
+         __bufferManager{DSBufferManager::getInstance()},
+         __resId(0)
 {
        if (id > 0) {
                wl_surface::init(waylandClient->wlClient(), (int)id, 4);
+               __resId = id;
        }
 }
 
@@ -90,6 +93,11 @@ DSWaylandSurfacePrivate::~DSWaylandSurfacePrivate()
                DSBufferManager::releaseInstance();
 }
 
+uint32_t DSWaylandSurfacePrivate::getResourceId()
+{
+       return __resId;
+}
+
 void DSWaylandSurfacePrivate::surface_bind_resource(Resource *resource)
 {
 }
@@ -230,4 +238,11 @@ bool DSWaylandSurface::hasResource()
        return false;
 }
 
+uint32_t DSWaylandSurface::getResourceId()
+{
+       DS_GET_PRIV(DSWaylandSurface);
+
+       return priv->getResourceId();
+}
+
 } /* namespace display_server */
index 7cc360b..41d1ccb 100644 (file)
@@ -65,6 +65,8 @@ public:
        struct ::wl_resource *getWlResource();
        bool hasResource();
 
+       uint32_t getResourceId();
+
 private:
        // signals
        DSSignal<std::shared_ptr<DSWaylandSurfaceCommitInfo>> __surfaceCommittedSignal;
index 121f034..abff9c2 100644 (file)
@@ -90,6 +90,8 @@ public:
        DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr, DSWaylandClient *waylandClient, uint32_t id);
        ~DSWaylandSurfacePrivate() override;
 
+       uint32_t getResourceId();
+
 protected:
        void surface_bind_resource(Resource *resource) override;
        void surface_destroy_resource(Resource *resource) override;
@@ -109,6 +111,7 @@ private:
        std::unique_ptr<DSWaylandSurfaceCommitInfo> __commitInfoPending;
        std::shared_ptr<DSWaylandSurfaceCommitInfo> __commitInfo;
        DSBufferManager *__bufferManager;
+       uint32_t __resId;
 };
 
 } /*namespace display_server */