Warning: That file was not part of the compilation database. It may have many parsing errors.

1/****************************************************************************
2**
3** Copyright (C) 2018 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtWaylandCompositor module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 or (at your option) any later version
20** approved by the KDE Free Qt Foundation. The licenses are as published by
21** the Free Software Foundation and appearing in the file LICENSE.GPL3
22** included in the packaging of this file. Please review the following
23** information to ensure the GNU General Public License requirements will
24** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25**
26** $QT_END_LICENSE$
27**
28****************************************************************************/
29
30#ifndef QWAYLANDXDGSHELL_H
31#define QWAYLANDXDGSHELL_H
32
33#include <QtWaylandCompositor/QWaylandCompositorExtension>
34#include <QtWaylandCompositor/QWaylandResource>
35#include <QtWaylandCompositor/QWaylandShell>
36#include <QtWaylandCompositor/QWaylandShellSurface>
37#include <QtWaylandCompositor/qwaylandquickchildren.h>
38
39#include <QtCore/QRect>
40
41struct wl_resource;
42
43QT_BEGIN_NAMESPACE
44
45class QWaylandClient;
46class QWaylandOutput;
47class QWaylandSeat;
48class QWaylandSurface;
49class QWaylandSurfaceRole;
50class QWaylandXdgShellPrivate;
51class QWaylandXdgSurface;
52class QWaylandXdgSurfacePrivate;
53class QWaylandXdgToplevel;
54class QWaylandXdgToplevelPrivate;
55class QWaylandXdgPopup;
56class QWaylandXdgPopupPrivate;
57class QWaylandXdgPositioner;
58
59class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgShell : public QWaylandShellTemplate<QWaylandXdgShell>
60{
61 Q_OBJECT
62 Q_DECLARE_PRIVATE(QWaylandXdgShell)
63public:
64 explicit QWaylandXdgShell();
65 explicit QWaylandXdgShell(QWaylandCompositor *compositor);
66
67 void initialize() override;
68
69 static const struct wl_interface *interface();
70 static QByteArray interfaceName();
71
72public Q_SLOTS:
73 uint ping(QWaylandClient *client);
74
75Q_SIGNALS:
76 void xdgSurfaceCreated(QWaylandXdgSurface *xdgSurface);
77 void toplevelCreated(QWaylandXdgToplevel *toplevel, QWaylandXdgSurface *xdgSurface);
78 void popupCreated(QWaylandXdgPopup *popup, QWaylandXdgSurface *xdgSurface);
79 void pong(uint serial);
80
81private Q_SLOTS:
82 void handleSeatChanged(QWaylandSeat *newSeat, QWaylandSeat *oldSeat);
83 void handleFocusChanged(QWaylandSurface *newSurface, QWaylandSurface *oldSurface);
84};
85
86class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgSurface : public QWaylandShellSurfaceTemplate<QWaylandXdgSurface>
87{
88 Q_OBJECT
89 Q_DECLARE_PRIVATE(QWaylandXdgSurface)
90 Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandXdgSurface)
91 Q_PROPERTY(QWaylandXdgShell *shell READ shell NOTIFY shellChanged)
92 Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged)
93 Q_PROPERTY(QWaylandXdgToplevel *toplevel READ toplevel NOTIFY toplevelCreated)
94 Q_PROPERTY(QWaylandXdgPopup *popup READ popup NOTIFY popupCreated)
95 Q_PROPERTY(QRect windowGeometry READ windowGeometry NOTIFY windowGeometryChanged)
96
97public:
98 explicit QWaylandXdgSurface();
99 explicit QWaylandXdgSurface(QWaylandXdgShell* xdgShell, QWaylandSurface *surface, const QWaylandResource &resource);
100
101 Q_INVOKABLE void initialize(QWaylandXdgShell* xdgShell, QWaylandSurface *surface, const QWaylandResource &resource);
102
103 Qt::WindowType windowType() const override;
104
105 QWaylandXdgShell *shell() const;
106 QWaylandSurface *surface() const;
107 QWaylandXdgToplevel *toplevel() const;
108 QWaylandXdgPopup *popup() const;
109 QRect windowGeometry() const;
110
111 static const struct wl_interface *interface();
112 static QByteArray interfaceName();
113 static QWaylandXdgSurface *fromResource(::wl_resource *resource);
114
115#if QT_CONFIG(wayland_compositor_quick)
116 QWaylandQuickShellIntegration *createIntegration(QWaylandQuickShellSurfaceItem *item) override;
117#endif
118
119Q_SIGNALS:
120 void shellChanged();
121 void surfaceChanged();
122 void toplevelCreated();
123 void popupCreated();
124 void windowGeometryChanged();
125
126private:
127 void initialize() override;
128
129private Q_SLOTS:
130 void handleSurfaceSizeChanged();
131 void handleBufferScaleChanged();
132};
133
134class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgToplevel : public QObject
135{
136 Q_OBJECT
137 Q_DECLARE_PRIVATE(QWaylandXdgToplevel)
138 Q_PROPERTY(QWaylandXdgSurface *xdgSurface READ xdgSurface CONSTANT)
139 Q_PROPERTY(QWaylandXdgToplevel *parentToplevel READ parentToplevel NOTIFY parentToplevelChanged)
140 Q_PROPERTY(QString title READ title NOTIFY titleChanged)
141 Q_PROPERTY(QString appId READ appId NOTIFY appIdChanged)
142 Q_PROPERTY(QSize maxSize READ maxSize NOTIFY maxSizeChanged)
143 Q_PROPERTY(QSize minSize READ minSize NOTIFY minSizeChanged)
144 Q_PROPERTY(QList<int> states READ statesAsInts NOTIFY statesChanged)
145 Q_PROPERTY(bool maximized READ maximized NOTIFY maximizedChanged)
146 Q_PROPERTY(bool fullscreen READ fullscreen NOTIFY fullscreenChanged)
147 Q_PROPERTY(bool resizing READ resizing NOTIFY resizingChanged)
148 Q_PROPERTY(bool activated READ activated NOTIFY activatedChanged)
149// QDoc fails to parse the property type that includes the keyword 'enum'
150#ifndef Q_CLANG_QDOC
151 Q_PROPERTY(enum DecorationMode decorationMode READ decorationMode NOTIFY decorationModeChanged)
152#else
153 Q_PROPERTY(DecorationMode decorationMode READ decorationMode NOTIFY decorationModeChanged)
154#endif
155public:
156 enum State : uint {
157 MaximizedState = 1,
158 FullscreenState = 2,
159 ResizingState = 3,
160 ActivatedState = 4
161 };
162 Q_ENUM(State)
163
164 enum DecorationMode {
165 ClientSideDecoration = 1,
166 ServerSideDecoration = 2,
167 };
168 Q_ENUM(DecorationMode)
169
170 explicit QWaylandXdgToplevel(QWaylandXdgSurface *xdgSurface, QWaylandResource &resource);
171 ~QWaylandXdgToplevel() override;
172
173 QWaylandXdgSurface *xdgSurface() const;
174 QWaylandXdgToplevel *parentToplevel() const;
175
176 QString title() const;
177 QString appId() const;
178 QSize maxSize() const;
179 QSize minSize() const;
180 QVector<QWaylandXdgToplevel::State> states() const;
181 bool maximized() const;
182 bool fullscreen() const;
183 bool resizing() const;
184 bool activated() const;
185 DecorationMode decorationMode() const;
186
187 Q_INVOKABLE QSize sizeForResize(const QSizeF &size, const QPointF &delta, Qt::Edges edges) const;
188 uint sendConfigure(const QSize &size, const QVector<State> &states);
189 Q_INVOKABLE uint sendConfigure(const QSize &size, const QVector<int> &states);
190 Q_INVOKABLE void sendClose();
191 Q_INVOKABLE uint sendMaximized(const QSize &size);
192 Q_INVOKABLE uint sendUnmaximized(const QSize &size = QSize(0, 0));
193 Q_INVOKABLE uint sendFullscreen(const QSize &size);
194 Q_INVOKABLE uint sendResizing(const QSize &maxSize);
195
196 static QWaylandSurfaceRole *role();
197 static QWaylandXdgToplevel *fromResource(::wl_resource *resource);
198
199Q_SIGNALS:
200 void parentToplevelChanged();
201 void titleChanged();
202 void appIdChanged();
203 void maxSizeChanged();
204 void minSizeChanged();
205 void startMove(QWaylandSeat *seat);
206 void startResize(QWaylandSeat *seat, Qt::Edges edges);
207 void statesChanged();
208 void maximizedChanged();
209 void fullscreenChanged();
210 void resizingChanged();
211 void activatedChanged();
212
213 void showWindowMenu(QWaylandSeat *seat, const QPoint &localSurfacePosition);
214 void setMaximized();
215 void unsetMaximized();
216 void setFullscreen(QWaylandOutput *output);
217 void unsetFullscreen();
218 void setMinimized();
219
220 void decorationModeChanged();
221
222private:
223 QList<int> statesAsInts() const;
224};
225
226class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgPopup : public QObject
227{
228 Q_OBJECT
229 Q_DECLARE_PRIVATE(QWaylandXdgPopup)
230 Q_PROPERTY(QWaylandXdgSurface *xdgSurface READ xdgSurface CONSTANT)
231 Q_PROPERTY(QWaylandXdgSurface *parentXdgSurface READ parentXdgSurface CONSTANT)
232 Q_PROPERTY(QRect configuredGeometry READ configuredGeometry NOTIFY configuredGeometryChanged)
233
234 // Positioner properties
235 Q_PROPERTY(QRect anchorRect READ anchorRect CONSTANT)
236 Q_PROPERTY(Qt::Edges anchorEdges READ anchorEdges CONSTANT)
237 Q_PROPERTY(Qt::Edges gravityEdges READ gravityEdges CONSTANT)
238 Q_PROPERTY(Qt::Orientations slideConstraints READ slideConstraints CONSTANT)
239 Q_PROPERTY(Qt::Orientations flipConstraints READ flipConstraints CONSTANT)
240 Q_PROPERTY(Qt::Orientations resizeConstraints READ resizeConstraints CONSTANT)
241 Q_PROPERTY(QPoint offset READ offset CONSTANT)
242 Q_PROPERTY(QSize positionerSize READ positionerSize CONSTANT)
243 Q_PROPERTY(QPoint unconstrainedPosition READ unconstrainedPosition CONSTANT)
244public:
245 QWaylandXdgSurface *xdgSurface() const;
246 QWaylandXdgSurface *parentXdgSurface() const;
247 QRect configuredGeometry() const;
248
249 // Positioner properties
250 QRect anchorRect() const;
251 Qt::Edges anchorEdges() const ;
252 Qt::Edges gravityEdges() const ;
253 Qt::Orientations slideConstraints() const;
254 Qt::Orientations flipConstraints() const;
255 Qt::Orientations resizeConstraints() const;
256 QPoint offset() const;
257 QSize positionerSize() const;
258 QPoint unconstrainedPosition() const;
259
260 Q_INVOKABLE uint sendConfigure(const QRect &geometry);
261 Q_REVISION(14) Q_INVOKABLE void sendPopupDone();
262
263 static QWaylandSurfaceRole *role();
264
265Q_SIGNALS:
266 void configuredGeometryChanged();
267
268private:
269 explicit QWaylandXdgPopup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parentXdgSurface,
270 QWaylandXdgPositioner *positioner, QWaylandResource &resource);
271 friend class QWaylandXdgSurfacePrivate;
272};
273
274QT_END_NAMESPACE
275
276#endif // QWAYLANDXDGSHELL_H
277

Warning: That file was not part of the compilation database. It may have many parsing errors.

Provided by KDAB

Privacy Policy
Learn Advanced QML with KDAB
Find out more

source code of qtwayland/src/compositor/extensions/qwaylandxdgshell.h