diff options
author | Giulio Camuffo <giulio.camuffo@kdab.com> | 2016-02-08 18:26:00 +0200 |
---|---|---|
committer | Giulio Camuffo <giuliocamuffo@gmail.com> | 2016-02-10 13:38:42 +0000 |
commit | b4f3f890475b50fac20c0d542a584dfdab4888a7 (patch) | |
tree | 1546e4e0fefa69ef608249c3989087cd79f6bac0 | |
parent | 1ce01dde7afa5ebbe7de6392ce9d99efe0e2d13a (diff) |
Allow initializing the server protocol classes with a wl_resource
Change-Id: I3efd23284392e0ff587f86c7c163c0e4ffadb1f1
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
-rw-r--r-- | src/qtwaylandscanner/qtwaylandscanner.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/qtwaylandscanner/qtwaylandscanner.cpp b/src/qtwaylandscanner/qtwaylandscanner.cpp index f74813659..afe3b80ec 100644 --- a/src/qtwaylandscanner/qtwaylandscanner.cpp +++ b/src/qtwaylandscanner/qtwaylandscanner.cpp @@ -422,6 +422,7 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArr printf(" public:\n"); printf(" %s(struct ::wl_client *client, int id, int version);\n", interfaceName); printf(" %s(struct ::wl_display *display, int version);\n", interfaceName); + printf(" %s(struct ::wl_resource *resource);\n", interfaceName); printf(" %s();\n", interfaceName); printf("\n"); printf(" virtual ~%s();\n", interfaceName); @@ -443,6 +444,7 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArr printf("\n"); printf(" void init(struct ::wl_client *client, int id, int version);\n"); printf(" void init(struct ::wl_display *display, int version);\n"); + printf(" void init(struct ::wl_resource *resource);\n"); printf("\n"); printf(" Resource *add(struct ::wl_client *client, int version);\n"); printf(" Resource *add(struct ::wl_client *client, int id, int version);\n"); @@ -502,6 +504,7 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArr printf(" static void destroy_func(struct ::wl_resource *client_resource);\n"); printf("\n"); printf(" Resource *bind(struct ::wl_client *client, uint32_t id, int version);\n"); + printf(" Resource *bind(struct ::wl_resource *handle);\n"); if (hasRequests) { printf("\n"); @@ -580,6 +583,15 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArr printf(" }\n"); printf("\n"); + printf(" %s::%s(struct ::wl_resource *resource)\n", interfaceName, interfaceName); + printf(" : m_resource_map()\n"); + printf(" , m_resource(0)\n"); + printf(" , m_global(0)\n"); + printf(" {\n"); + printf(" init(resource);\n"); + printf(" }\n"); + printf("\n"); + printf(" %s::%s()\n", interfaceName, interfaceName); printf(" : m_resource_map()\n"); printf(" , m_resource(0)\n"); @@ -599,6 +611,12 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArr printf(" }\n"); printf("\n"); + printf(" void %s::init(struct ::wl_resource *resource)\n", interfaceName); + printf(" {\n"); + printf(" m_resource = bind(resource);\n"); + printf(" }\n"); + printf("\n"); + printf(" %s::Resource *%s::add(struct ::wl_client *client, int version)\n", interfaceName, interfaceName); printf(" {\n"); printf(" Resource *resource = bind(client, 0, version);\n"); @@ -673,10 +691,16 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArr printf(" %s::Resource *%s::bind(struct ::wl_client *client, uint32_t id, int version)\n", interfaceName, interfaceName); printf(" {\n"); printf(" Q_ASSERT_X(!wl_client_get_object(client, id), \"QWaylandObject bind\", QStringLiteral(\"binding to object %%1 more than once\").arg(id).toLocal8Bit().constData());\n"); + printf(" struct ::wl_resource *handle = wl_resource_create(client, &::%s_interface, version, id);\n", interfaceName); + printf(" return bind(handle);\n"); + printf(" }\n"); + printf("\n"); + + printf(" %s::Resource *%s::bind(struct ::wl_resource *handle)\n", interfaceName, interfaceName); + printf(" {\n"); printf(" Resource *resource = %s_allocate();\n", interfaceNameStripped); printf(" resource->%s_object = this;\n", interfaceNameStripped); printf("\n"); - printf(" struct ::wl_resource *handle = wl_resource_create(client, &::%s_interface, version, id);\n", interfaceName); printf(" wl_resource_set_implementation(handle, %s, resource, destroy_func);", interfaceMember.constData()); printf("\n"); printf(" resource->handle = handle;\n"); |