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 QWAYLANDXDGSHELLV5_H 31 #define QWAYLANDXDGSHELLV5_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 41 struct wl_resource; 42 43 QT_BEGIN_NAMESPACE 44 45 #if QT_DEPRECATED_SINCE(5, 15) 46 47 class QWaylandXdgShellV5Private; 48 class QWaylandXdgSurfaceV5; 49 class QWaylandXdgSurfaceV5Private; 50 class QWaylandXdgPopupV5; 51 class QWaylandXdgPopupV5Private; 52 53 class QWaylandSurface; 54 class QWaylandSurfaceRole; 55 class QWaylandSeat; 56 class QWaylandOutput; 57 class QWaylandClient; 58 59 class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgShellV5 : public QWaylandShellTemplate<QWaylandXdgShellV5> 60 { 61 Q_OBJECT 62 Q_DECLARE_PRIVATE(QWaylandXdgShellV5) 63 public: 64 QWaylandXdgShellV5(); 65 QWaylandXdgShellV5(QWaylandCompositor *compositor); 66 67 void initialize() override; 68 QWaylandClient *popupClient() const; 69 70 static const struct wl_interface *interface(); 71 static QByteArray interfaceName(); 72 73 public Q_SLOTS: 74 uint ping(QWaylandClient *client); 75 void closeAllPopups(); 76 77 Q_SIGNALS: 78 void xdgSurfaceRequested(QWaylandSurface *surface, const QWaylandResource &resource); 79 void xdgSurfaceCreated(QWaylandXdgSurfaceV5 *xdgSurface); 80 void xdgPopupCreated(QWaylandXdgPopupV5 *xdgPopup); 81 void xdgPopupRequested(QWaylandSurface *surface, QWaylandSurface *parent, QWaylandSeat *seat, const QPoint &position, const QWaylandResource &resource); 82 void pong(uint serial); 83 84 private Q_SLOTS: 85 void handleSeatChanged(QWaylandSeat *newSeat, QWaylandSeat *oldSeat); 86 void handleFocusChanged(QWaylandSurface *newSurface, QWaylandSurface *oldSurface); 87 88 }; 89 90 class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgSurfaceV5 : public QWaylandShellSurfaceTemplate<QWaylandXdgSurfaceV5> 91 { 92 Q_OBJECT 93 Q_DECLARE_PRIVATE(QWaylandXdgSurfaceV5) 94 Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandXdgSurfaceV5) 95 Q_PROPERTY(QWaylandXdgShellV5 *shell READ shell NOTIFY shellChanged) 96 Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged) 97 Q_PROPERTY(QWaylandXdgSurfaceV5 *parentSurface READ parentSurface NOTIFY parentSurfaceChanged) 98 Q_PROPERTY(QString title READ title NOTIFY titleChanged) 99 Q_PROPERTY(QString appId READ appId NOTIFY appIdChanged) 100 Q_PROPERTY(QRect windowGeometry READ windowGeometry NOTIFY windowGeometryChanged) 101 102 Q_PROPERTY(QList<int> states READ statesAsInts NOTIFY statesChanged) 103 Q_PROPERTY(bool maximized READ maximized NOTIFY maximizedChanged) 104 Q_PROPERTY(bool fullscreen READ fullscreen NOTIFY fullscreenChanged) 105 Q_PROPERTY(bool resizing READ resizing NOTIFY resizingChanged) 106 Q_PROPERTY(bool activated READ activated NOTIFY activatedChanged) 107 108 public: 109 enum State : uint { 110 MaximizedState = 1, 111 FullscreenState = 2, 112 ResizingState = 3, 113 ActivatedState = 4 114 }; 115 Q_ENUM(State) 116 117 enum ResizeEdge : uint { 118 NoneEdge = 0, 119 TopEdge = 1, 120 BottomEdge = 2, 121 LeftEdge = 4, 122 TopLeftEdge = 5, 123 BottomLeftEdge = 6, 124 RightEdge = 8, 125 TopRightEdge = 9, 126 BottomRightEdge = 10 127 }; 128 Q_ENUM(ResizeEdge) 129 130 QWaylandXdgSurfaceV5(); 131 QWaylandXdgSurfaceV5(QWaylandXdgShellV5* xdgShell, QWaylandSurface *surface, const QWaylandResource &resource); 132 133 Q_INVOKABLE void initialize(QWaylandXdgShellV5* xdgShell, QWaylandSurface *surface, const QWaylandResource &resource); 134 135 Qt::WindowType windowType() const override; 136 137 QString title() const; 138 QString appId() const; 139 QRect windowGeometry() const; 140 QVector<uint> states() const; 141 bool maximized() const; 142 bool fullscreen() const; 143 bool resizing() const; 144 bool activated() const; 145 146 QWaylandXdgShellV5 *shell() const; 147 148 QWaylandSurface *surface() const; 149 QWaylandXdgSurfaceV5 *parentSurface() const; 150 151 static const struct wl_interface *interface(); 152 static QByteArray interfaceName(); 153 static QWaylandSurfaceRole *role(); 154 static QWaylandXdgSurfaceV5 *fromResource(::wl_resource *resource); 155 156 Q_INVOKABLE QSize sizeForResize(const QSizeF &size, const QPointF &delta, ResizeEdge edge); 157 Q_INVOKABLE uint sendConfigure(const QSize &size, const QVector<uint> &states); 158 Q_INVOKABLE uint sendConfigure(const QSize &size, const QVector<State> &states); 159 Q_INVOKABLE void sendClose(); 160 161 Q_INVOKABLE uint sendMaximized(const QSize &size); 162 Q_INVOKABLE uint sendUnmaximized(const QSize &size = QSize(0, 0)); 163 Q_INVOKABLE uint sendFullscreen(const QSize &size); 164 Q_INVOKABLE uint sendResizing(const QSize &maxSize); 165 166 #if QT_CONFIG(wayland_compositor_quick) 167 QWaylandQuickShellIntegration *createIntegration(QWaylandQuickShellSurfaceItem *item) override; 168 #endif 169 170 Q_SIGNALS: 171 void shellChanged(); 172 void surfaceChanged(); 173 void titleChanged(); 174 void windowGeometryChanged(); 175 void appIdChanged(); 176 void parentSurfaceChanged(); 177 178 void statesChanged(); 179 void maximizedChanged(); 180 void fullscreenChanged(); 181 void resizingChanged(); 182 void activatedChanged(); 183 184 void showWindowMenu(QWaylandSeat *seat, const QPoint &localSurfacePosition); 185 void startMove(QWaylandSeat *seat); 186 void startResize(QWaylandSeat *seat, ResizeEdge edges); 187 void setTopLevel(); 188 void setTransient(); 189 void setMaximized(); 190 void unsetMaximized(); 191 void setFullscreen(QWaylandOutput *output); 192 void unsetFullscreen(); 193 void setMinimized(); 194 void ackConfigure(uint serial); 195 196 private: 197 void initialize() override; 198 QList<int> statesAsInts() const; 199 200 private Q_SLOTS: 201 void handleSurfaceSizeChanged(); 202 void handleBufferScaleChanged(); 203 }; 204 205 class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgPopupV5 : public QWaylandShellSurfaceTemplate<QWaylandXdgPopupV5> 206 { 207 Q_OBJECT 208 Q_DECLARE_PRIVATE(QWaylandXdgPopupV5) 209 Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandXdgPopupV5) 210 Q_PROPERTY(QWaylandXdgShellV5 *shell READ shell NOTIFY shellChanged) 211 Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged) 212 Q_PROPERTY(QWaylandSurface *parentSurface READ parentSurface NOTIFY parentSurfaceChanged) 213 Q_PROPERTY(QPoint position READ position NOTIFY positionChanged) 214 215 public: 216 QWaylandXdgPopupV5(); 217 QWaylandXdgPopupV5(QWaylandXdgShellV5 *xdgShell, QWaylandSurface *surface, QWaylandSurface *parentSurface, 218 const QPoint &position, const QWaylandResource &resource); 219 windowType()220 Qt::WindowType windowType() const override { return Qt::WindowType::Popup; } 221 222 Q_INVOKABLE void initialize(QWaylandXdgShellV5 *shell, QWaylandSurface *surface, 223 QWaylandSurface *parentSurface, const QPoint &position, const QWaylandResource &resource); 224 225 QWaylandXdgShellV5 *shell() const; 226 227 QWaylandSurface *surface() const; 228 QWaylandSurface *parentSurface() const; 229 QPoint position() const; 230 231 static const struct wl_interface *interface(); 232 static QByteArray interfaceName(); 233 static QWaylandSurfaceRole *role(); 234 static QWaylandXdgPopupV5 *fromResource(::wl_resource *resource); 235 236 Q_INVOKABLE void sendPopupDone(); 237 238 #if QT_CONFIG(wayland_compositor_quick) 239 QWaylandQuickShellIntegration *createIntegration(QWaylandQuickShellSurfaceItem *item) override; 240 #endif 241 242 Q_SIGNALS: 243 void shellChanged(); 244 void surfaceChanged(); 245 void parentSurfaceChanged(); 246 void positionChanged(); 247 248 private: 249 void initialize() override; 250 }; 251 252 #endif // QT_DEPRECATED_SINCE(5, 15) 253 254 QT_END_NAMESPACE 255 256 #endif /*QWAYLANDXDGSHELLV5_H*/ 257