1/****************************************************************************
2**
3** Copyright (C) 2017 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 QWAYLANDWLSHELL_H
31#define QWAYLANDWLSHELL_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/QSize>
40
41QT_BEGIN_NAMESPACE
42
43class QWaylandWlShellPrivate;
44class QWaylandWlShellSurfacePrivate;
45class QWaylandSurface;
46class QWaylandClient;
47class QWaylandSeat;
48class QWaylandOutput;
49class QWaylandSurfaceRole;
50class QWaylandWlShellSurface;
51
52class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandWlShell : public QWaylandShellTemplate<QWaylandWlShell>
53{
54 Q_OBJECT
55 Q_DECLARE_PRIVATE(QWaylandWlShell)
56public:
57 QWaylandWlShell();
58 QWaylandWlShell(QWaylandCompositor *compositor);
59
60 void initialize() override;
61 QList<QWaylandWlShellSurface *> shellSurfaces() const;
62 QList<QWaylandWlShellSurface *> shellSurfacesForClient(QWaylandClient* client) const;
63 QList<QWaylandWlShellSurface *> mappedPopups() const;
64 QWaylandClient *popupClient() const;
65
66 static const struct wl_interface *interface();
67 static QByteArray interfaceName();
68
69public Q_SLOTS:
70 void closeAllPopups();
71
72Q_SIGNALS:
73 void wlShellSurfaceRequested(QWaylandSurface *surface, const QWaylandResource &resource);
74 void wlShellSurfaceCreated(QWaylandWlShellSurface *shellSurface);
75};
76
77class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandWlShellSurface : public QWaylandShellSurfaceTemplate<QWaylandWlShellSurface>
78{
79 Q_OBJECT
80 Q_DECLARE_PRIVATE(QWaylandWlShellSurface)
81 Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandWlShellSurface)
82 Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged)
83 Q_PROPERTY(QWaylandWlShell *shell READ shell NOTIFY shellChanged)
84 Q_PROPERTY(QString title READ title NOTIFY titleChanged)
85 Q_PROPERTY(QString className READ className NOTIFY classNameChanged)
86
87public:
88 enum FullScreenMethod {
89 DefaultFullScreen,
90 ScaleFullScreen,
91 DriverFullScreen,
92 FillFullScreen
93 };
94 Q_ENUM(FullScreenMethod);
95
96 enum ResizeEdge {
97 NoneEdge = 0,
98 TopEdge = 1,
99 BottomEdge = 2,
100 LeftEdge = 4,
101 TopLeftEdge = 5,
102 BottomLeftEdge = 6,
103 RightEdge = 8,
104 TopRightEdge = 9,
105 BottomRightEdge = 10
106 };
107 Q_ENUM(ResizeEdge);
108
109 QWaylandWlShellSurface();
110 QWaylandWlShellSurface(QWaylandWlShell *shell, QWaylandSurface *surface, const QWaylandResource &resource);
111 ~QWaylandWlShellSurface() override;
112
113 Q_INVOKABLE void initialize(QWaylandWlShell *shell, QWaylandSurface *surface, const QWaylandResource &resource);
114
115 QString title() const;
116 QString className() const;
117
118 QWaylandSurface *surface() const;
119 QWaylandWlShell *shell() const;
120
121 Qt::WindowType windowType() const override;
122
123 static const struct wl_interface *interface();
124 static QByteArray interfaceName();
125 static QWaylandSurfaceRole *role();
126
127 static QWaylandWlShellSurface *fromResource(wl_resource *res);
128
129 Q_INVOKABLE QSize sizeForResize(const QSizeF &size, const QPointF &delta, ResizeEdge edges);
130 Q_INVOKABLE void sendConfigure(const QSize &size, ResizeEdge edges);
131 Q_INVOKABLE void sendPopupDone();
132
133#if QT_CONFIG(wayland_compositor_quick)
134 QWaylandQuickShellIntegration *createIntegration(QWaylandQuickShellSurfaceItem *item) override;
135#endif
136
137public Q_SLOTS:
138 void ping();
139
140Q_SIGNALS:
141 void surfaceChanged();
142 void shellChanged();
143 void titleChanged();
144 void classNameChanged();
145 void pong();
146 void startMove(QWaylandSeat *seat);
147 void startResize(QWaylandSeat *seat, ResizeEdge edges);
148
149 void setDefaultToplevel();
150 void setTransient(QWaylandSurface *parentSurface, const QPoint &relativeToParent, bool inactive);
151 void setFullScreen(FullScreenMethod method, uint framerate, QWaylandOutput *output);
152 void setPopup(QWaylandSeat *seat, QWaylandSurface *parentSurface, const QPoint &relativeToParent);
153 void setMaximized(QWaylandOutput *output);
154
155private:
156 void initialize() override;
157};
158
159QT_END_NAMESPACE
160
161#endif /*QWAYLANDWLSHELL_H*/
162

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