1 /*
2 SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5 */
6 #include "../compat/wayland-xdg-shell-v5-client-protocol.h"
7 #include "event_queue.h"
8 #include "output.h"
9 #include "seat.h"
10 #include "surface.h"
11 #include "wayland_pointer_p.h"
12 #include "xdgshell_p.h"
13
14 namespace KWayland
15 {
16 namespace Client
17 {
18 XdgShell::Private::~Private() = default;
19
XdgShell(Private * p,QObject * parent)20 XdgShell::XdgShell(Private *p, QObject *parent)
21 : QObject(parent)
22 , d(p)
23 {
24 }
25
~XdgShell()26 XdgShell::~XdgShell()
27 {
28 release();
29 }
30
setup(xdg_shell * xdgshellv5)31 void XdgShell::setup(xdg_shell *xdgshellv5)
32 {
33 d->setupV5(xdgshellv5);
34 }
35
setup(zxdg_shell_v6 * xdgshellv6)36 void XdgShell::setup(zxdg_shell_v6 *xdgshellv6)
37 {
38 d->setupV6(xdgshellv6);
39 }
40
setup(xdg_wm_base * xdg_wm_base)41 void XdgShell::setup(xdg_wm_base *xdg_wm_base)
42 {
43 d->setup(xdg_wm_base);
44 }
45
release()46 void XdgShell::release()
47 {
48 d->release();
49 }
50
destroy()51 void XdgShell::destroy()
52 {
53 d->destroy();
54 }
55
setEventQueue(EventQueue * queue)56 void XdgShell::setEventQueue(EventQueue *queue)
57 {
58 d->queue = queue;
59 }
60
eventQueue()61 EventQueue *XdgShell::eventQueue()
62 {
63 return d->queue;
64 }
65
operator xdg_shell*()66 XdgShell::operator xdg_shell *()
67 {
68 return *(d.data());
69 }
70
operator xdg_shell*() const71 XdgShell::operator xdg_shell *() const
72 {
73 return *(d.data());
74 }
75
operator zxdg_shell_v6*()76 XdgShell::operator zxdg_shell_v6 *()
77 {
78 return *(d.data());
79 }
80
operator zxdg_shell_v6*() const81 XdgShell::operator zxdg_shell_v6 *() const
82 {
83 return *(d.data());
84 }
85
operator xdg_wm_base*()86 XdgShell::operator xdg_wm_base *()
87 {
88 return *(d.data());
89 }
90
operator xdg_wm_base*() const91 XdgShell::operator xdg_wm_base *() const
92 {
93 return *(d.data());
94 }
95
isValid() const96 bool XdgShell::isValid() const
97 {
98 return d->isValid();
99 }
100
createSurface(Surface * surface,QObject * parent)101 XdgShellSurface *XdgShell::createSurface(Surface *surface, QObject *parent)
102 {
103 return d->getXdgSurface(surface, parent);
104 }
105
createPopup(Surface * surface,Surface * parentSurface,Seat * seat,quint32 serial,const QPoint & parentPos,QObject * parent)106 XdgShellPopup *XdgShell::createPopup(Surface *surface, Surface *parentSurface, Seat *seat, quint32 serial, const QPoint &parentPos, QObject *parent)
107 {
108 return d->getXdgPopup(surface, parentSurface, seat, serial, parentPos, parent);
109 }
110
createPopup(Surface * surface,XdgShellSurface * parentSurface,const XdgPositioner & positioner,QObject * parent)111 XdgShellPopup *XdgShell::createPopup(Surface *surface, XdgShellSurface *parentSurface, const XdgPositioner &positioner, QObject *parent)
112 {
113 return d->getXdgPopup(surface, parentSurface, positioner, parent);
114 }
115
createPopup(Surface * surface,XdgShellPopup * parentSurface,const XdgPositioner & positioner,QObject * parent)116 XdgShellPopup *XdgShell::createPopup(Surface *surface, XdgShellPopup *parentSurface, const XdgPositioner &positioner, QObject *parent)
117 {
118 return d->getXdgPopup(surface, parentSurface, positioner, parent);
119 }
120
Private(XdgShellSurface * q)121 XdgShellSurface::Private::Private(XdgShellSurface *q)
122 : q(q)
123 {
124 }
125
126 XdgShellSurface::Private::~Private() = default;
127
XdgShellSurface(Private * p,QObject * parent)128 XdgShellSurface::XdgShellSurface(Private *p, QObject *parent)
129 : QObject(parent)
130 , d(p)
131 {
132 }
133
~XdgShellSurface()134 XdgShellSurface::~XdgShellSurface()
135 {
136 release();
137 }
138
setup(xdg_surface * xdgsurfacev5)139 void XdgShellSurface::setup(xdg_surface *xdgsurfacev5)
140 {
141 d->setupV5(xdgsurfacev5);
142 }
143
setup(zxdg_surface_v6 * xdgsurfacev6,zxdg_toplevel_v6 * xdgtoplevelv6)144 void XdgShellSurface::setup(zxdg_surface_v6 *xdgsurfacev6, zxdg_toplevel_v6 *xdgtoplevelv6)
145 {
146 d->setupV6(xdgsurfacev6, xdgtoplevelv6);
147 }
148
setup(xdg_surface * xdgsurface,xdg_toplevel * xdgtoplevel)149 void XdgShellSurface::setup(xdg_surface *xdgsurface, xdg_toplevel *xdgtoplevel)
150 {
151 d->setup(xdgsurface, xdgtoplevel);
152 }
153
release()154 void XdgShellSurface::release()
155 {
156 d->release();
157 }
158
destroy()159 void XdgShellSurface::destroy()
160 {
161 d->destroy();
162 }
163
setEventQueue(EventQueue * queue)164 void XdgShellSurface::setEventQueue(EventQueue *queue)
165 {
166 d->queue = queue;
167 }
168
eventQueue()169 EventQueue *XdgShellSurface::eventQueue()
170 {
171 return d->queue;
172 }
173
operator xdg_surface*()174 XdgShellSurface::operator xdg_surface *()
175 {
176 return *(d.data());
177 }
178
operator xdg_surface*() const179 XdgShellSurface::operator xdg_surface *() const
180 {
181 return *(d.data());
182 }
183
operator xdg_toplevel*()184 XdgShellSurface::operator xdg_toplevel *()
185 {
186 return *(d.data());
187 }
188
operator xdg_toplevel*() const189 XdgShellSurface::operator xdg_toplevel *() const
190 {
191 return *(d.data());
192 }
193
operator zxdg_surface_v6*()194 XdgShellSurface::operator zxdg_surface_v6 *()
195 {
196 return *(d.data());
197 }
198
operator zxdg_surface_v6*() const199 XdgShellSurface::operator zxdg_surface_v6 *() const
200 {
201 return *(d.data());
202 }
203
operator zxdg_toplevel_v6*()204 XdgShellSurface::operator zxdg_toplevel_v6 *()
205 {
206 return *(d.data());
207 }
208
operator zxdg_toplevel_v6*() const209 XdgShellSurface::operator zxdg_toplevel_v6 *() const
210 {
211 return *(d.data());
212 }
213
isValid() const214 bool XdgShellSurface::isValid() const
215 {
216 return d->isValid();
217 }
218
setTransientFor(XdgShellSurface * parent)219 void XdgShellSurface::setTransientFor(XdgShellSurface *parent)
220 {
221 d->setTransientFor(parent);
222 }
223
setTitle(const QString & title)224 void XdgShellSurface::setTitle(const QString &title)
225 {
226 d->setTitle(title);
227 }
228
setAppId(const QByteArray & appId)229 void XdgShellSurface::setAppId(const QByteArray &appId)
230 {
231 d->setAppId(appId);
232 }
233
requestShowWindowMenu(Seat * seat,quint32 serial,const QPoint & pos)234 void XdgShellSurface::requestShowWindowMenu(Seat *seat, quint32 serial, const QPoint &pos)
235 {
236 d->showWindowMenu(seat, serial, pos.x(), pos.y());
237 }
238
requestMove(Seat * seat,quint32 serial)239 void XdgShellSurface::requestMove(Seat *seat, quint32 serial)
240 {
241 d->move(seat, serial);
242 }
243
requestResize(Seat * seat,quint32 serial,Qt::Edges edges)244 void XdgShellSurface::requestResize(Seat *seat, quint32 serial, Qt::Edges edges)
245 {
246 d->resize(seat, serial, edges);
247 }
248
ackConfigure(quint32 serial)249 void XdgShellSurface::ackConfigure(quint32 serial)
250 {
251 d->ackConfigure(serial);
252 }
253
setMaximized(bool set)254 void XdgShellSurface::setMaximized(bool set)
255 {
256 if (set) {
257 d->setMaximized();
258 } else {
259 d->unsetMaximized();
260 }
261 }
262
setFullscreen(bool set,Output * output)263 void XdgShellSurface::setFullscreen(bool set, Output *output)
264 {
265 if (set) {
266 d->setFullscreen(output);
267 } else {
268 d->unsetFullscreen();
269 }
270 }
271
setMaxSize(const QSize & size)272 void XdgShellSurface::setMaxSize(const QSize &size)
273 {
274 d->setMaxSize(size);
275 }
276
setMinSize(const QSize & size)277 void XdgShellSurface::setMinSize(const QSize &size)
278 {
279 d->setMinSize(size);
280 }
281
setWindowGeometry(const QRect & windowGeometry)282 void XdgShellSurface::setWindowGeometry(const QRect &windowGeometry)
283 {
284 d->setWindowGeometry(windowGeometry);
285 }
286
requestMinimize()287 void XdgShellSurface::requestMinimize()
288 {
289 d->setMinimized();
290 }
291
setSize(const QSize & size)292 void XdgShellSurface::setSize(const QSize &size)
293 {
294 if (d->size == size) {
295 return;
296 }
297 d->size = size;
298 Q_EMIT sizeChanged(size);
299 }
300
size() const301 QSize XdgShellSurface::size() const
302 {
303 return d->size;
304 }
305
306 XdgShellPopup::Private::~Private() = default;
307
Private(XdgShellPopup * q)308 XdgShellPopup::Private::Private(XdgShellPopup *q)
309 : q(q)
310 {
311 }
312
XdgShellPopup(Private * p,QObject * parent)313 XdgShellPopup::XdgShellPopup(Private *p, QObject *parent)
314 : QObject(parent)
315 , d(p)
316 {
317 }
318
~XdgShellPopup()319 XdgShellPopup::~XdgShellPopup()
320 {
321 release();
322 }
323
setup(xdg_popup * xdgpopupv5)324 void XdgShellPopup::setup(xdg_popup *xdgpopupv5)
325 {
326 d->setupV5(xdgpopupv5);
327 }
328
setup(zxdg_surface_v6 * xdgsurfacev6,zxdg_popup_v6 * xdgpopupv6)329 void XdgShellPopup::setup(zxdg_surface_v6 *xdgsurfacev6, zxdg_popup_v6 *xdgpopupv6)
330 {
331 d->setupV6(xdgsurfacev6, xdgpopupv6);
332 }
333
setup(xdg_surface * surface,xdg_popup * popup)334 void XdgShellPopup::setup(xdg_surface *surface, xdg_popup *popup)
335 {
336 d->setup(surface, popup);
337 }
338
release()339 void XdgShellPopup::release()
340 {
341 d->release();
342 }
343
destroy()344 void XdgShellPopup::destroy()
345 {
346 d->destroy();
347 }
348
setEventQueue(EventQueue * queue)349 void XdgShellPopup::setEventQueue(EventQueue *queue)
350 {
351 d->queue = queue;
352 }
353
eventQueue()354 EventQueue *XdgShellPopup::eventQueue()
355 {
356 return d->queue;
357 }
358
requestGrab(KWayland::Client::Seat * seat,quint32 serial)359 void XdgShellPopup::requestGrab(KWayland::Client::Seat *seat, quint32 serial)
360 {
361 d->requestGrab(seat, serial);
362 }
363
ackConfigure(quint32 serial)364 void XdgShellPopup::ackConfigure(quint32 serial)
365 {
366 d->ackConfigure(serial);
367 }
368
setWindowGeometry(const QRect & windowGeometry)369 void XdgShellPopup::setWindowGeometry(const QRect &windowGeometry)
370 {
371 d->setWindowGeometry(windowGeometry);
372 }
373
operator xdg_surface*()374 XdgShellPopup::operator xdg_surface *()
375 {
376 return *(d.data());
377 }
378
operator xdg_surface*() const379 XdgShellPopup::operator xdg_surface *() const
380 {
381 return *(d.data());
382 }
383
operator xdg_popup*()384 XdgShellPopup::operator xdg_popup *()
385 {
386 return *(d.data());
387 }
388
operator xdg_popup*() const389 XdgShellPopup::operator xdg_popup *() const
390 {
391 return *(d.data());
392 }
393
operator zxdg_surface_v6*()394 XdgShellPopup::operator zxdg_surface_v6 *()
395 {
396 return *(d.data());
397 }
398
operator zxdg_surface_v6*() const399 XdgShellPopup::operator zxdg_surface_v6 *() const
400 {
401 return *(d.data());
402 }
403
operator zxdg_popup_v6*()404 XdgShellPopup::operator zxdg_popup_v6 *()
405 {
406 return *(d.data());
407 }
408
operator zxdg_popup_v6*() const409 XdgShellPopup::operator zxdg_popup_v6 *() const
410 {
411 return *(d.data());
412 }
413
isValid() const414 bool XdgShellPopup::isValid() const
415 {
416 return d->isValid();
417 }
418
XdgPositioner(const QSize & initialSize,const QRect & anchor)419 XdgPositioner::XdgPositioner(const QSize &initialSize, const QRect &anchor)
420 : d(new Private)
421 {
422 d->initialSize = initialSize;
423 d->anchorRect = anchor;
424 }
425
XdgPositioner(const XdgPositioner & other)426 XdgPositioner::XdgPositioner(const XdgPositioner &other)
427 : d(new Private)
428 {
429 *d = *other.d;
430 }
431
~XdgPositioner()432 XdgPositioner::~XdgPositioner()
433 {
434 }
435
setInitialSize(const QSize & size)436 void XdgPositioner::setInitialSize(const QSize &size)
437 {
438 d->initialSize = size;
439 }
440
initialSize() const441 QSize XdgPositioner::initialSize() const
442 {
443 return d->initialSize;
444 }
445
setAnchorRect(const QRect & anchor)446 void XdgPositioner::setAnchorRect(const QRect &anchor)
447 {
448 d->anchorRect = anchor;
449 }
450
anchorRect() const451 QRect XdgPositioner::anchorRect() const
452 {
453 return d->anchorRect;
454 }
455
setAnchorEdge(Qt::Edges edge)456 void XdgPositioner::setAnchorEdge(Qt::Edges edge)
457 {
458 d->anchorEdge = edge;
459 }
460
anchorEdge() const461 Qt::Edges XdgPositioner::anchorEdge() const
462 {
463 return d->anchorEdge;
464 }
465
setAnchorOffset(const QPoint & offset)466 void XdgPositioner::setAnchorOffset(const QPoint &offset)
467 {
468 d->anchorOffset = offset;
469 }
470
anchorOffset() const471 QPoint XdgPositioner::anchorOffset() const
472 {
473 return d->anchorOffset;
474 }
475
setGravity(Qt::Edges edge)476 void XdgPositioner::setGravity(Qt::Edges edge)
477 {
478 d->gravity = edge;
479 }
480
gravity() const481 Qt::Edges XdgPositioner::gravity() const
482 {
483 return d->gravity;
484 }
485
setConstraints(Constraints constraints)486 void XdgPositioner::setConstraints(Constraints constraints)
487 {
488 d->constraints = constraints;
489 }
490
constraints() const491 XdgPositioner::Constraints XdgPositioner::constraints() const
492 {
493 return d->constraints;
494 }
495
496 }
497 }
498