6 #include "compositor_interface.h" 10 #include <wayland-server.h> 17 class CompositorInterface::Private :
public Global::Private
20 Private(CompositorInterface *q, Display *d);
23 void bind(wl_client *client, uint32_t version, uint32_t
id)
override;
24 void createSurface(wl_client *client, wl_resource *resource, uint32_t
id);
25 void createRegion(wl_client *client, wl_resource *resource, uint32_t
id);
27 static void unbind(wl_resource *resource);
28 static void createSurfaceCallback(wl_client *client, wl_resource *resource, uint32_t
id);
29 static void createRegionCallback(wl_client *client, wl_resource *resource, uint32_t
id);
30 static Private *cast(wl_resource *r) {
31 return reinterpret_cast<Private*
>(wl_resource_get_user_data(r));
34 CompositorInterface *q;
35 static const struct wl_compositor_interface s_interface;
36 static const quint32 s_version;
39 const quint32 CompositorInterface::Private::s_version = 4;
41 CompositorInterface::Private::Private(CompositorInterface *q, Display *d)
42 : Global::Private(d, &wl_compositor_interface, s_version)
48 const struct wl_compositor_interface CompositorInterface::Private::s_interface = {
49 createSurfaceCallback,
54 CompositorInterface::CompositorInterface(Display *display,
QObject *
parent)
55 : Global(new Private(this, display), parent)
59 CompositorInterface::~CompositorInterface() =
default;
61 void CompositorInterface::Private::bind(wl_client *client, uint32_t version, uint32_t
id)
63 auto c = display->getConnection(client);
64 wl_resource *resource = c->createResource(&wl_compositor_interface, qMin(version, s_version),
id);
66 wl_client_post_no_memory(client);
69 wl_resource_set_implementation(resource, &s_interface,
this, unbind);
73 void CompositorInterface::Private::unbind(wl_resource *resource)
79 void CompositorInterface::Private::createSurfaceCallback(wl_client *client, wl_resource *resource, uint32_t
id)
81 cast(resource)->createSurface(client, resource,
id);
84 void CompositorInterface::Private::createSurface(wl_client *client, wl_resource *resource, uint32_t
id)
86 SurfaceInterface *surface =
new SurfaceInterface(q, resource);
87 surface->create(display->getConnection(client), wl_resource_get_version(resource), id);
88 if (!surface->resource()) {
89 wl_resource_post_no_memory(resource);
93 Q_EMIT q->surfaceCreated(surface);
96 void CompositorInterface::Private::createRegionCallback(wl_client *client, wl_resource *resource, uint32_t
id)
98 cast(resource)->createRegion(client, resource,
id);
101 void CompositorInterface::Private::createRegion(wl_client *client, wl_resource *resource, uint32_t
id)
103 RegionInterface *region =
new RegionInterface(q, resource);
104 region->create(display->getConnection(client), wl_resource_get_version(resource), id);
105 if (!region->resource()) {
106 wl_resource_post_no_memory(resource);
110 Q_EMIT q->regionCreated(region);
QObject * parent() const const