6 #include "xdgdecoration.h"
8 #include "event_queue.h"
9 #include "wayland_pointer_p.h"
14 #include "wayland-xdg-decoration-unstable-v1-client-protocol.h"
20 class Q_DECL_HIDDEN XdgDecorationManager::Private
25 void setup(zxdg_decoration_manager_v1 *arg);
27 WaylandPointer<zxdg_decoration_manager_v1, zxdg_decoration_manager_v1_destroy> xdgdecorationmanager;
28 EventQueue *queue =
nullptr;
37 void XdgDecorationManager::Private::setup(zxdg_decoration_manager_v1 *arg)
40 Q_ASSERT(!xdgdecorationmanager);
41 xdgdecorationmanager.setup(arg);
44 XdgDecorationManager::~XdgDecorationManager()
51 d->setup(xdgdecorationmanager);
56 d->xdgdecorationmanager.release();
61 d->xdgdecorationmanager.destroy();
64 XdgDecorationManager::operator zxdg_decoration_manager_v1 *()
66 return d->xdgdecorationmanager;
69 XdgDecorationManager::operator zxdg_decoration_manager_v1 *()
const
71 return d->xdgdecorationmanager;
76 return d->xdgdecorationmanager.isValid();
92 xdg_toplevel *toplevel_resource = *toplevel;
93 if (!toplevel_resource) {
94 qWarning() <<
"Trying to create an XdgDecoration without an XDGShell stable toplevel object";
97 auto p =
new XdgDecoration(
parent);
98 auto w = zxdg_decoration_manager_v1_get_toplevel_decoration(d->xdgdecorationmanager, toplevel_resource);
100 d->queue->addProxy(w);
106 class Q_DECL_HIDDEN XdgDecoration::Private
109 Private(XdgDecoration *q);
111 void setup(zxdg_toplevel_decoration_v1 *arg);
113 WaylandPointer<zxdg_toplevel_decoration_v1, zxdg_toplevel_decoration_v1_destroy> xdgdecoration;
115 XdgDecoration::Mode m_mode = XdgDecoration::Mode::ClientSide;
121 static void configureCallback(
void *data, zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1, uint32_t mode);
123 static const zxdg_toplevel_decoration_v1_listener s_listener;
126 const zxdg_toplevel_decoration_v1_listener XdgDecoration::Private::s_listener = {configureCallback};
128 void XdgDecoration::Private::configureCallback(
void *data, zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1, uint32_t m)
130 auto p =
reinterpret_cast<XdgDecoration::Private *
>(data);
131 Q_ASSERT(p->xdgdecoration == zxdg_toplevel_decoration_v1);
133 case ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE:
134 p->m_mode = XdgDecoration::Mode::ClientSide;
136 case ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE:
137 p->m_mode = XdgDecoration::Mode::ServerSide;
140 Q_EMIT p->q->modeChanged(p->m_mode);
143 XdgDecoration::Private::Private(XdgDecoration *q)
148 XdgDecoration::XdgDecoration(
QObject *parent)
150 , d(new Private(this))
154 void XdgDecoration::Private::setup(zxdg_toplevel_decoration_v1 *arg)
157 Q_ASSERT(!xdgdecoration);
158 xdgdecoration.setup(arg);
159 zxdg_toplevel_decoration_v1_add_listener(xdgdecoration, &s_listener,
this);
162 XdgDecoration::~XdgDecoration()
167 void XdgDecoration::setup(zxdg_toplevel_decoration_v1 *xdgdecoration)
169 d->setup(xdgdecoration);
174 d->xdgdecoration.release();
177 void XdgDecoration::destroy()
179 d->xdgdecoration.destroy();
182 XdgDecoration::operator zxdg_toplevel_decoration_v1 *()
184 return d->xdgdecoration;
187 XdgDecoration::operator zxdg_toplevel_decoration_v1 *()
const
189 return d->xdgdecoration;
192 bool XdgDecoration::isValid()
const
194 return d->xdgdecoration.isValid();
197 void XdgDecoration::setMode(XdgDecoration::Mode mode)
202 case XdgDecoration::Mode::ClientSide:
203 mode_raw = ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE;
206 mode_raw = ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE;
209 zxdg_toplevel_decoration_v1_set_mode(d->xdgdecoration, mode_raw);
212 void XdgDecoration::unsetMode()
215 zxdg_toplevel_decoration_v1_unset_mode(d->xdgdecoration);
218 XdgDecoration::Mode XdgDecoration::mode()
const