DSWaylandCompositor: add callback function for surface creation 38/241638/1
authorSooChan Lim <sc1.lim@samsung.com>
Wed, 15 Jul 2020 07:22:37 +0000 (16:22 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 20 Aug 2020 09:54:07 +0000 (18:54 +0900)
Change-Id: I5c69f1a3bbc13ff957ceaf977518c54dd93902f8

src/DSWaylandServer/DSWaylandCompositor.cpp
src/DSWaylandServer/DSWaylandCompositor.h

index 7c3dfae..0790310 100644 (file)
@@ -215,9 +215,13 @@ void DSWaylandCompositorPrivate::compositor_destroy_resource(wl_compositor::Reso
 
 void DSWaylandCompositorPrivate::compositor_create_surface(wl_compositor::Resource *resource, uint32_t id)
 {
+       DS_GET_PUB(DSWaylandCompositor);
+
        DSWaylandClient *waylandClient = DSWaylandClient::fromWlClient(resource->client());
-       auto waylandSurface = std::make_shared<DSWaylandSurface>(waylandClient, id);
-       //TODO: add window to the zone
+       auto waylandSruface = std::make_shared<DSWaylandSurface>(waylandClient, id);
+
+       // emit a signal of the surface created
+       pub->__surfaceCreatedSignal.emit(waylandSruface);
 }
 
 void DSWaylandCompositorPrivate::compositor_create_region(wl_compositor::Resource *resource, uint32_t id)
@@ -227,8 +231,7 @@ void DSWaylandCompositorPrivate::compositor_create_region(wl_compositor::Resourc
 
 /* Begin Public Class Implementation */
 DSWaylandCompositor::DSWaylandCompositor(DSObject *parent)
-    : DSObject(),
-      DS_INIT_PRIVATE_PTR(DSWaylandCompositor)
+    : DS_INIT_PRIVATE_PTR(DSWaylandCompositor)
 {
        //TODO
 }
@@ -330,4 +333,9 @@ DSWaylandSeat *DSWaylandCompositor::defaultSeat()
        return nullptr;
 }
 
+void DSWaylandCompositor::registerCallbackSurfaceCreated(DSObject *slot, std::function<void(std::shared_ptr<DSWaylandSurface>)> func)
+{
+       this->__surfaceCreatedSignal.connect(slot, func);
+}
+
 }
index d999ac2..53dae1d 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "DSCore.h"
 #include "DSObject.h"
+#include "DSSignal.h"
 
 struct wl_display;
 
@@ -11,6 +12,7 @@ namespace display_server
 
 class DSWaylandClient;
 class DSWaylandSeat;
+class DSWaylandSurface;
 class DSWaylandCompositorPrivate;
 class DS_DECL_EXPORT DSWaylandCompositor : public DSObject
 {
@@ -33,13 +35,16 @@ public:
        std::list<DSWaylandClient *> clients();
        DSWaylandSeat *defaultSeat();
 
-       //TODO
+       // Callback methods
+       void registerCallbackSurfaceCreated(DSObject *slot, std::function<void(std::shared_ptr<DSWaylandSurface>)> func);
 
 protected:
        //TODO
 
 private:
-       //TODO
+
+       // signals
+       DSSignal<std::shared_ptr<DSWaylandSurface>> __surfaceCreatedSignal;
 };
 
 }