DSWaylandClient *waylandClient = DSWaylandClient::fromWlClient(resource->client());
auto waylandSruface = std::make_shared<DSWaylandSurface>(waylandClient, id);
+ pub->__surfaceList.push_front(waylandSruface);
+
// emit a signal of the surface created
pub->__surfaceCreatedSignal.emit(waylandSruface);
}
return priv->getShell();
}
+void DSWaylandCompositor::sendSurfaceDestroy(DSWaylandSurface *dswSurface)
+{
+ for (auto s : __surfaceList)
+ {
+ if (s.get() == dswSurface)
+ {
+ __surfaceDestroySignal.emit(s);
+ __surfaceList.remove(s);
+ break;
+ }
+ }
+}
+
void DSWaylandCompositor::registerCallbackSurfaceCreated(DSObject *slot, std::function<void(std::shared_ptr<DSWaylandSurface>)> func)
{
this->__surfaceCreatedSignal.connect(slot, func);
}
+void DSWaylandCompositor::registerCallbackSurfaceDestroy(DSObject *slot, std::function<void(std::shared_ptr<DSWaylandSurface>)> func)
+{
+ __surfaceDestroySignal.connect(slot, func);
+}
+
}
bool setShell(IDSWaylandShell *shell);
IDSWaylandShell *getShell(void);
+ void sendSurfaceDestroy(DSWaylandSurface *dswSurface);
+
// Callback methods
void registerCallbackSurfaceCreated(DSObject *slot, std::function<void(std::shared_ptr<DSWaylandSurface>)> func);
+ void registerCallbackSurfaceDestroy(DSObject *slot, std::function<void(std::shared_ptr<DSWaylandSurface>)> func);
protected:
//TODO
DSWaylandCompositor(DSObject *parent);
DSWaylandCompositor& operator=(const DSWaylandCompositor&) = delete;
+ std::list<std::shared_ptr<DSWaylandSurface>> __surfaceList;
+
// signals
DSSignal<std::shared_ptr<DSWaylandSurface>> __surfaceCreatedSignal;
+ DSSignal<std::shared_ptr<DSWaylandSurface>> __surfaceDestroySignal;
};
}
void DSWaylandSurfacePrivate::surface_destroy_resource(Resource *resource)
{
+ DS_GET_PUB(DSWaylandSurface);
+
+ DSWaylandCompositor *dswCompositor = DSWaylandCompositor::getInstance();
+ if (dswCompositor)
+ {
+ dswCompositor->sendSurfaceDestroy(pub);
+ }
+ DSWaylandCompositor::releaseInstance();
}
void DSWaylandSurfacePrivate::surface_destroy(Resource *resource)