6 #include "datadevicemanager_interface.h"
7 #include "datasource_interface.h"
10 #include "seat_interface_p.h"
12 #include <wayland-server.h>
18 class DataDeviceManagerInterface::Private :
public Global::Private
21 Private(DataDeviceManagerInterface *q, Display *d);
24 void bind(wl_client *client, uint32_t version, uint32_t
id)
override;
25 void createDataSource(wl_client *client, wl_resource *resource, uint32_t
id);
26 void getDataDevice(wl_client *client, wl_resource *resource, uint32_t
id, wl_resource *seat);
28 static void unbind(wl_resource *resource);
29 static void createDataSourceCallback(wl_client *client, wl_resource *resource, uint32_t
id);
30 static void getDataDeviceCallback(wl_client *client, wl_resource *resource, uint32_t
id, wl_resource *seat);
31 static Private *cast(wl_resource *r)
33 return reinterpret_cast<Private *
>(wl_resource_get_user_data(r));
36 DataDeviceManagerInterface *q;
37 static const struct wl_data_device_manager_interface s_interface;
38 static const quint32 s_version;
39 static const qint32 s_dataDeviceVersion;
40 static const qint32 s_dataSourceVersion;
43 const quint32 DataDeviceManagerInterface::Private::s_version = 3;
44 const qint32 DataDeviceManagerInterface::Private::s_dataDeviceVersion = 3;
45 const qint32 DataDeviceManagerInterface::Private::s_dataSourceVersion = 3;
48 const struct wl_data_device_manager_interface DataDeviceManagerInterface::Private::s_interface = {createDataSourceCallback, getDataDeviceCallback};
51 DataDeviceManagerInterface::Private::Private(DataDeviceManagerInterface *q, Display *d)
52 : Global::Private(d, &wl_data_device_manager_interface, s_version)
57 void DataDeviceManagerInterface::Private::bind(wl_client *client, uint32_t version, uint32_t
id)
59 auto c = display->getConnection(client);
60 wl_resource *resource = c->createResource(&wl_data_device_manager_interface, qMin(version, s_version),
id);
62 wl_client_post_no_memory(client);
65 wl_resource_set_implementation(resource, &s_interface,
this, unbind);
69 void DataDeviceManagerInterface::Private::unbind(wl_resource *resource)
74 void DataDeviceManagerInterface::Private::createDataSourceCallback(wl_client *client, wl_resource *resource, uint32_t
id)
76 cast(resource)->createDataSource(client, resource,
id);
79 void DataDeviceManagerInterface::Private::createDataSource(wl_client *client, wl_resource *resource, uint32_t
id)
81 DataSourceInterface *dataSource =
new DataSourceInterface(q, resource);
82 dataSource->create(display->getConnection(client), qMin(wl_resource_get_version(resource), s_dataSourceVersion),
id);
83 if (!dataSource->resource()) {
84 wl_resource_post_no_memory(resource);
88 Q_EMIT q->dataSourceCreated(dataSource);
91 void DataDeviceManagerInterface::Private::getDataDeviceCallback(wl_client *client, wl_resource *resource, uint32_t
id, wl_resource *seat)
93 cast(resource)->getDataDevice(client, resource,
id, seat);
96 void DataDeviceManagerInterface::Private::getDataDevice(wl_client *client, wl_resource *resource, uint32_t
id, wl_resource *seat)
100 DataDeviceInterface *dataDevice =
new DataDeviceInterface(s, q, resource);
101 dataDevice->create(display->getConnection(client), qMin(wl_resource_get_version(resource), s_dataDeviceVersion),
id);
102 if (!dataDevice->resource()) {
103 wl_resource_post_no_memory(resource);
106 s->d_func()->registerDataDevice(dataDevice);
107 Q_EMIT q->dataDeviceCreated(dataDevice);
110 DataDeviceManagerInterface::DataDeviceManagerInterface(Display *display,
QObject *parent)
111 : Global(new Private(this, display), parent)
115 DataDeviceManagerInterface::~DataDeviceManagerInterface() =
default;