Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qwaylandxdgdecorationv1.cpp
Go to the documentation of this file.
1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
5
6#include <QtWaylandCompositor/QWaylandXdgToplevel>
7#include <QtWaylandCompositor/private/qwaylandxdgshell_p.h>
8
9#include <QtWaylandCompositor/QWaylandCompositor>
10#include <QtCore/QObject>
11
13
71
76{
78
81 if (!compositor) {
82 qWarning() << "Failed to find QWaylandCompositor when initializing QWaylandXdgDecorationV1";
83 return;
84 }
85 d->init(compositor->display(), 1);
86}
87
109
111{
113 if (d->m_preferredMode == preferredMode)
114 return;
115
116 d->m_preferredMode = preferredMode;
118}
119
124{
125 return QWaylandXdgDecorationManagerV1Private::interface();
126}
127
129 Resource *resource, uint id, wl_resource *toplevelResource)
130{
132
133 auto *toplevel = QWaylandXdgToplevel::fromResource(toplevelResource);
134 if (!toplevel) {
135 qWarning() << "Couldn't find toplevel for decoration";
136 return;
137 }
138
139 //TODO: verify that the xdg surface is unconfigured, and post protocol error/warning
140
141 auto *toplevelPrivate = QWaylandXdgToplevelPrivate::get(toplevel);
142
143 if (toplevelPrivate->m_decoration) {
144 qWarning() << "zxdg_decoration_manager_v1.get_toplevel_decoration:"
145 << toplevel << "already has a decoration object, ignoring";
146 //TODO: protocol error as well?
147 return;
148 }
149
150 new QWaylandXdgToplevelDecorationV1(toplevel, q, resource->client(), id);
151}
152
155 wl_client *client, int id)
156 : QtWaylandServer::zxdg_toplevel_decoration_v1(client, id, /*version*/ 1)
157 , m_toplevel(toplevel)
158 , m_manager(manager)
159{
160 Q_ASSERT(toplevel);
161 auto *toplevelPrivate = QWaylandXdgToplevelPrivate::get(toplevel);
162 Q_ASSERT(!toplevelPrivate->m_decoration);
163 toplevelPrivate->m_decoration = this;
164 sendConfigure(manager->preferredMode());
165}
166
171
173{
174 if (configuredMode() == mode)
175 return;
176
177 switch (mode) {
178 case DecorationMode::ClientSideDecoration:
179 send_configure(mode_client_side);
180 break;
181 case DecorationMode::ServerSideDecoration:
182 send_configure(mode_server_side);
183 break;
184 default:
185 qWarning() << "Illegal mode in QWaylandXdgToplevelDecorationV1::sendConfigure" << mode;
186 break;
187 }
188
189 m_configuredMode = mode;
190 emit m_toplevel->decorationModeChanged();
191}
192
194{
195 Q_UNUSED(resource);
196 delete this;
197}
198
200{
201 wl_resource_destroy(resource->handle);
202}
203
205{
206 Q_UNUSED(resource);
207 m_clientPreferredMode = mode;
208 handleClientPreferredModeChanged();
209}
210
212{
213 Q_UNUSED(resource);
214 m_clientPreferredMode = 0;
215 handleClientPreferredModeChanged();
216}
217
218void QWaylandXdgToplevelDecorationV1::handleClientPreferredModeChanged()
219{
220 if (m_clientPreferredMode != m_configuredMode) {
221 if (m_clientPreferredMode == 0)
222 sendConfigure(m_manager->preferredMode());
223 else
224 sendConfigure(DecorationMode(m_clientPreferredMode));
225 }
226}
227
229
230#include "moc_qwaylandxdgdecorationv1.cpp"
virtual void initialize()
Initializes the QWaylandCompositorExtension.
\qmltype WaylandCompositor \instantiates QWaylandCompositor \inqmlmodule QtWayland....
void zxdg_decoration_manager_v1_get_toplevel_decoration(Resource *resource, uint id, ::wl_resource *toplevelResource) override
\inmodule QtWaylandCompositor
static const struct wl_interface * interface()
Returns the Wayland interface for the QWaylandXdgDecorationManagerV1.
QWaylandXdgToplevel::DecorationMode preferredMode
\qmlproperty string XdgDecorationManagerV1::preferredMode
void setPreferredMode(QWaylandXdgToplevel::DecorationMode preferredMode)
void initialize() override
Initializes the extension.
QWaylandXdgDecorationManagerV1()
Constructs a QWaylandXdgDecorationManagerV1 object.
QWaylandXdgToplevel::DecorationMode DecorationMode
void zxdg_toplevel_decoration_v1_unset_mode(Resource *resource) override
void zxdg_toplevel_decoration_v1_destroy_resource(Resource *resource) override
void zxdg_toplevel_decoration_v1_destroy(Resource *resource) override
QWaylandXdgToplevelDecorationV1(QWaylandXdgToplevel *toplevel, QWaylandXdgDecorationManagerV1 *manager, wl_client *client, int id)
void zxdg_toplevel_decoration_v1_set_mode(Resource *resource, uint32_t mode) override
static QWaylandXdgToplevelPrivate * get(QWaylandXdgToplevel *toplevel)
\qmltype XdgToplevel \instantiates QWaylandXdgToplevel \inqmlmodule QtWayland.Compositor....
static QWaylandXdgToplevel * fromResource(::wl_resource *resource)
Returns the QWaylandXdgToplevel corresponding to the resource.
DecorationMode
This enum type is used to specify the window decoration mode for toplevel windows.
void decorationModeChanged()
Combined button and popup list for selecting options.
#define qWarning
Definition qlogging.h:166
static QOpenGLCompositor * compositor
GLenum mode
GLenum GLuint id
[7]
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define emit
#define Q_UNUSED(x)
unsigned int uint
Definition qtypes.h:34
QNetworkAccessManager manager