KWayland

xdgforeign_v2.cpp
1 /*
2  SPDX-FileCopyrightText: 2017 Marco Martin <[email protected]>
3 
4  SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5 */
6 #include "xdgforeign_v2.h"
7 #include "event_queue.h"
8 #include "wayland_pointer_p.h"
9 #include "xdgforeign_p.h"
10 
11 #include <wayland-xdg-foreign-unstable-v2-client-protocol.h>
12 
13 #include <QDebug>
14 
15 namespace KWayland
16 {
17 namespace Client
18 {
19 class Q_DECL_HIDDEN XdgExporterUnstableV2::Private : public XdgExporter::Private
20 {
21 public:
22  Private();
23 
24  XdgExported *exportTopLevelV2(Surface *surface, QObject *parent) override;
25  void setupV2(zxdg_exporter_v2 *arg) override;
26  zxdg_exporter_v2 *exporterV2() override;
27 
28  void release() override;
29  void destroy() override;
30  bool isValid() override;
31 
32  WaylandPointer<zxdg_exporter_v2, zxdg_exporter_v2_destroy> exporter;
33 };
34 
35 XdgExporterUnstableV2::Private::Private()
36  : XdgExporter::Private()
37 {
38 }
39 
40 zxdg_exporter_v2 *XdgExporterUnstableV2::Private::exporterV2()
41 {
42  return exporter;
43 }
44 
45 void XdgExporterUnstableV2::Private::release()
46 {
47  exporter.release();
48 }
49 
50 void XdgExporterUnstableV2::Private::destroy()
51 {
52  exporter.destroy();
53 }
54 
55 bool XdgExporterUnstableV2::Private::isValid()
56 {
57  return exporter.isValid();
58 }
59 
60 XdgExported *XdgExporterUnstableV2::Private::exportTopLevelV2(Surface *surface, QObject *parent)
61 {
62  Q_ASSERT(isValid());
63  auto p = new XdgExportedUnstableV2(parent);
64  auto w = zxdg_exporter_v2_export_toplevel(exporter, *surface);
65  if (queue) {
66  queue->addProxy(w);
67  }
68  p->setup(w);
69  return p;
70 }
71 
72 XdgExporterUnstableV2::XdgExporterUnstableV2(QObject *parent)
73  : XdgExporter(new Private, parent)
74 {
75 }
76 
77 void XdgExporterUnstableV2::Private::setupV2(zxdg_exporter_v2 *arg)
78 {
79  Q_ASSERT(arg);
80  Q_ASSERT(!exporter);
81  exporter.setup(arg);
82 }
83 
84 XdgExporterUnstableV2::~XdgExporterUnstableV2()
85 {
86 }
87 
88 class Q_DECL_HIDDEN XdgImporterUnstableV2::Private : public XdgImporter::Private
89 {
90 public:
91  Private();
92 
93  XdgImported *importTopLevelV2(const QString &handle, QObject *parent) override;
94  void setupV2(zxdg_importer_v2 *arg) override;
95  zxdg_importer_v2 *importerV2() override;
96 
97  void release() override;
98  void destroy() override;
99  bool isValid() override;
100 
101  WaylandPointer<zxdg_importer_v2, zxdg_importer_v2_destroy> importer;
102  EventQueue *queue = nullptr;
103 };
104 
105 XdgImporterUnstableV2::Private::Private()
106  : XdgImporter::Private()
107 {
108 }
109 
110 zxdg_importer_v2 *XdgImporterUnstableV2::Private::importerV2()
111 {
112  return importer;
113 }
114 
115 void XdgImporterUnstableV2::Private::release()
116 {
117  importer.release();
118 }
119 
120 void XdgImporterUnstableV2::Private::destroy()
121 {
122  importer.destroy();
123 }
124 
125 bool XdgImporterUnstableV2::Private::isValid()
126 {
127  return importer.isValid();
128 }
129 
130 XdgImported *XdgImporterUnstableV2::Private::importTopLevelV2(const QString &handle, QObject *parent)
131 {
132  Q_ASSERT(isValid());
133  auto p = new XdgImportedUnstableV2(parent);
134  auto w = zxdg_importer_v2_import_toplevel(importer, handle.toUtf8());
135  if (queue) {
136  queue->addProxy(w);
137  }
138  p->setup(w);
139  return p;
140 }
141 
143  : XdgImporter(new Private, parent)
144 {
145 }
146 
147 void XdgImporterUnstableV2::Private::setupV2(zxdg_importer_v2 *arg)
148 {
149  Q_ASSERT(arg);
150  Q_ASSERT(!importer);
151  importer.setup(arg);
152 }
153 
154 XdgImporterUnstableV2::~XdgImporterUnstableV2()
155 {
156 }
157 
158 class Q_DECL_HIDDEN XdgExportedUnstableV2::Private : public XdgExported::Private
159 {
160 public:
161  Private(XdgExportedUnstableV2 *q);
162 
163  void setupV2(zxdg_exported_v2 *arg) override;
164  zxdg_exported_v2 *exportedV2() override;
165 
166  void release() override;
167  void destroy() override;
168  bool isValid() override;
169 
170  WaylandPointer<zxdg_exported_v2, zxdg_exported_v2_destroy> exported;
171 
172 private:
173  static void handleCallback(void *data, zxdg_exported_v2 *zxdg_exported_v2, const char *handle);
174 
175  static const zxdg_exported_v2_listener s_listener;
176 };
177 
178 zxdg_exported_v2 *XdgExportedUnstableV2::Private::exportedV2()
179 {
180  return exported;
181 }
182 
183 void XdgExportedUnstableV2::Private::release()
184 {
185  exported.release();
186 }
187 
188 void XdgExportedUnstableV2::Private::destroy()
189 {
190  exported.destroy();
191 }
192 
193 bool XdgExportedUnstableV2::Private::isValid()
194 {
195  return exported.isValid();
196 }
197 
198 const zxdg_exported_v2_listener XdgExportedUnstableV2::Private::s_listener = {handleCallback};
199 
200 void XdgExportedUnstableV2::Private::handleCallback(void *data, zxdg_exported_v2 *zxdg_exported_v2, const char *handle)
201 {
202  auto p = reinterpret_cast<XdgExportedUnstableV2::Private *>(data);
203  Q_ASSERT(p->exported == zxdg_exported_v2);
204 
205  p->handle = handle;
206  Q_EMIT p->q->done();
207 }
208 
209 XdgExportedUnstableV2::XdgExportedUnstableV2(QObject *parent)
210  : XdgExported(new Private(this), parent)
211 {
212 }
213 
214 void XdgExportedUnstableV2::Private::setupV2(zxdg_exported_v2 *arg)
215 {
216  Q_ASSERT(arg);
217  Q_ASSERT(!exported);
218  exported.setup(arg);
219  zxdg_exported_v2_add_listener(exported, &s_listener, this);
220 }
221 
222 XdgExportedUnstableV2::Private::Private(XdgExportedUnstableV2 *q)
223  : XdgExported::Private::Private(q)
224 {
225 }
226 
227 XdgExportedUnstableV2::~XdgExportedUnstableV2()
228 {
229 }
230 
231 class Q_DECL_HIDDEN XdgImportedUnstableV2::Private : public XdgImported::Private
232 {
233 public:
234  Private(XdgImportedUnstableV2 *q);
235 
236  void setupV2(zxdg_imported_v2 *arg) override;
237  zxdg_imported_v2 *importedV2() override;
238 
239  void setParentOf(Surface *surface) override;
240  void release() override;
241  void destroy() override;
242  bool isValid() override;
243 
244  WaylandPointer<zxdg_imported_v2, zxdg_imported_v2_destroy> imported;
245 
246 private:
247  static void destroyedCallback(void *data, zxdg_imported_v2 *zxdg_imported_v2);
248 
249  static const zxdg_imported_v2_listener s_listener;
250 };
251 
252 XdgImportedUnstableV2::Private::Private(XdgImportedUnstableV2 *q)
253  : XdgImported::Private::Private(q)
254 {
255 }
256 
257 zxdg_imported_v2 *XdgImportedUnstableV2::Private::importedV2()
258 {
259  return imported;
260 }
261 
262 void XdgImportedUnstableV2::Private::release()
263 {
264  imported.release();
265 }
266 
267 void XdgImportedUnstableV2::Private::destroy()
268 {
269  imported.destroy();
270 }
271 
272 bool XdgImportedUnstableV2::Private::isValid()
273 {
274  return imported.isValid();
275 }
276 
277 void XdgImportedUnstableV2::Private::setParentOf(Surface *surface)
278 {
279  Q_ASSERT(isValid());
280  zxdg_imported_v2_set_parent_of(imported, *surface);
281 }
282 
283 const zxdg_imported_v2_listener XdgImportedUnstableV2::Private::s_listener = {destroyedCallback};
284 
285 void XdgImportedUnstableV2::Private::destroyedCallback(void *data, zxdg_imported_v2 *zxdg_imported_v2)
286 {
287  auto p = reinterpret_cast<XdgImportedUnstableV2::Private *>(data);
288  Q_ASSERT(p->imported == zxdg_imported_v2);
289 
290  p->q->release();
291  Q_EMIT p->q->importedDestroyed();
292 }
293 
294 XdgImportedUnstableV2::XdgImportedUnstableV2(QObject *parent)
295  : XdgImported(new Private(this), parent)
296 {
297 }
298 
299 void XdgImportedUnstableV2::Private::setupV2(zxdg_imported_v2 *arg)
300 {
301  Q_ASSERT(arg);
302  Q_ASSERT(!imported);
303  imported.setup(arg);
304  zxdg_imported_v2_add_listener(imported, &s_listener, this);
305 }
306 
307 XdgImportedUnstableV2::~XdgImportedUnstableV2()
308 {
309 }
310 
311 }
312 }
Wrapper for the zxdg_exporter_v2 interface.
Definition: xdgforeign.h:52
void destroy()
Destroys the data held by this .
Definition: xdgforeign.cpp:112
Wrapper class for wl_event_queue interface.
Definition: event_queue.h:54
Wrapper for the zxdg_importer_v2 interface.
Definition: xdgforeign.h:152
Wrapper for the wl_surface interface.
Definition: surface.h:43
void release()
Releases the zxdg_exporter_v2 interface.
Definition: xdgforeign.cpp:43
XdgImporterUnstableV2(QObject *parent=nullptr)
Creates a new .
bool isValid(QStringView ifopt)
void destroy()
Destroys the data held by this .
Definition: xdgforeign.cpp:48
QObject * parent() const const
Q_EMITQ_EMIT
void release()
Releases the zxdg_importer_v2 interface.
Definition: xdgforeign.cpp:107
QByteArray toUtf8() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Thu Sep 23 2021 22:51:10 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.