File indexing completed on 2024-06-02 05:36:04
0001 /* 0002 SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 #ifndef KWAYLAND_CLIENT_XDGSHELL_P_H 0007 #define KWAYLAND_CLIENT_XDGSHELL_P_H 0008 #include "xdgshell.h" 0009 0010 #include <QDebug> 0011 #include <QRect> 0012 #include <QSize> 0013 0014 namespace KWayland 0015 { 0016 namespace Client 0017 { 0018 class Q_DECL_HIDDEN XdgShell::Private 0019 { 0020 public: 0021 virtual ~Private(); 0022 virtual void setupV5(xdg_shell *xdgshellv5) 0023 { 0024 Q_UNUSED(xdgshellv5) 0025 } 0026 virtual void setupV6(zxdg_shell_v6 *xdgshellv6) 0027 { 0028 Q_UNUSED(xdgshellv6) 0029 } 0030 virtual void setup(xdg_wm_base *xdgshell) 0031 { 0032 Q_UNUSED(xdgshell); 0033 } 0034 virtual void release() = 0; 0035 virtual void destroy() = 0; 0036 virtual bool isValid() const = 0; 0037 virtual operator xdg_shell *() 0038 { 0039 return nullptr; 0040 } 0041 virtual operator xdg_shell *() const 0042 { 0043 return nullptr; 0044 } 0045 virtual operator zxdg_shell_v6 *() 0046 { 0047 return nullptr; 0048 } 0049 virtual operator zxdg_shell_v6 *() const 0050 { 0051 return nullptr; 0052 } 0053 virtual operator xdg_wm_base *() 0054 { 0055 return nullptr; 0056 } 0057 virtual operator xdg_wm_base *() const 0058 { 0059 return nullptr; 0060 } 0061 0062 virtual XdgShellSurface *getXdgSurface(Surface *surface, QObject *parent) = 0; 0063 0064 virtual XdgShellPopup *getXdgPopup(Surface *surface, Surface *parentSurface, Seat *seat, quint32 serial, const QPoint &parentPos, QObject *parent) 0065 { 0066 Q_UNUSED(surface) 0067 Q_UNUSED(parentSurface) 0068 Q_UNUSED(seat) 0069 Q_UNUSED(serial) 0070 Q_UNUSED(parentPos) 0071 Q_UNUSED(parent) 0072 Q_ASSERT(false); 0073 return nullptr; 0074 }; 0075 0076 virtual XdgShellPopup *getXdgPopup(Surface *surface, XdgShellSurface *parentSurface, const XdgPositioner &positioner, QObject *parent) 0077 { 0078 Q_UNUSED(surface) 0079 Q_UNUSED(parentSurface) 0080 Q_UNUSED(positioner) 0081 Q_UNUSED(parent) 0082 Q_ASSERT(false); 0083 return nullptr; 0084 } 0085 0086 virtual XdgShellPopup *getXdgPopup(Surface *surface, XdgShellPopup *parentSurface, const XdgPositioner &positioner, QObject *parent) 0087 { 0088 Q_UNUSED(surface) 0089 Q_UNUSED(parentSurface) 0090 Q_UNUSED(positioner) 0091 Q_UNUSED(parent) 0092 Q_ASSERT(false); 0093 return nullptr; 0094 } 0095 0096 EventQueue *queue = nullptr; 0097 0098 protected: 0099 Private() = default; 0100 }; 0101 0102 class XdgShellUnstableV5 : public XdgShell 0103 { 0104 Q_OBJECT 0105 public: 0106 explicit XdgShellUnstableV5(QObject *parent = nullptr); 0107 ~XdgShellUnstableV5() override; 0108 0109 private: 0110 class Private; 0111 }; 0112 0113 class XdgShellUnstableV6 : public XdgShell 0114 { 0115 Q_OBJECT 0116 public: 0117 explicit XdgShellUnstableV6(QObject *parent = nullptr); 0118 ~XdgShellUnstableV6() override; 0119 0120 private: 0121 class Private; 0122 }; 0123 0124 class XdgShellSurfaceUnstableV5 : public XdgShellSurface 0125 { 0126 Q_OBJECT 0127 public: 0128 ~XdgShellSurfaceUnstableV5() override; 0129 0130 private: 0131 explicit XdgShellSurfaceUnstableV5(QObject *parent = nullptr); 0132 friend class XdgShellUnstableV5; 0133 class Private; 0134 }; 0135 0136 class XdgTopLevelUnstableV6 : public XdgShellSurface 0137 { 0138 Q_OBJECT 0139 public: 0140 ~XdgTopLevelUnstableV6() override; 0141 0142 private: 0143 explicit XdgTopLevelUnstableV6(QObject *parent = nullptr); 0144 friend class XdgShellUnstableV6; 0145 class Private; 0146 }; 0147 0148 class Q_DECL_HIDDEN XdgShellSurface::Private 0149 { 0150 public: 0151 virtual ~Private(); 0152 EventQueue *queue = nullptr; 0153 QSize size; 0154 0155 virtual void setupV5(xdg_surface *surface) 0156 { 0157 Q_UNUSED(surface) 0158 } 0159 virtual void setupV6(zxdg_surface_v6 *surface, zxdg_toplevel_v6 *toplevel) 0160 { 0161 Q_UNUSED(toplevel) 0162 Q_UNUSED(surface) 0163 } 0164 virtual void setup(xdg_surface *surface, xdg_toplevel *toplevel) 0165 { 0166 Q_UNUSED(surface) 0167 Q_UNUSED(toplevel) 0168 } 0169 virtual void release() = 0; 0170 virtual void destroy() = 0; 0171 virtual bool isValid() const = 0; 0172 virtual operator xdg_surface *() 0173 { 0174 return nullptr; 0175 } 0176 virtual operator xdg_surface *() const 0177 { 0178 return nullptr; 0179 } 0180 virtual operator xdg_toplevel *() 0181 { 0182 return nullptr; 0183 } 0184 virtual operator xdg_toplevel *() const 0185 { 0186 return nullptr; 0187 } 0188 virtual operator zxdg_surface_v6 *() 0189 { 0190 return nullptr; 0191 } 0192 virtual operator zxdg_surface_v6 *() const 0193 { 0194 return nullptr; 0195 } 0196 virtual operator zxdg_toplevel_v6 *() 0197 { 0198 return nullptr; 0199 } 0200 virtual operator zxdg_toplevel_v6 *() const 0201 { 0202 return nullptr; 0203 } 0204 0205 virtual void setTransientFor(XdgShellSurface *parent) = 0; 0206 virtual void setTitle(const QString &title) = 0; 0207 virtual void setAppId(const QByteArray &appId) = 0; 0208 virtual void showWindowMenu(Seat *seat, quint32 serial, qint32 x, qint32 y) = 0; 0209 virtual void move(Seat *seat, quint32 serial) = 0; 0210 virtual void resize(Seat *seat, quint32 serial, Qt::Edges edges) = 0; 0211 virtual void ackConfigure(quint32 serial) = 0; 0212 virtual void setMaximized() = 0; 0213 virtual void unsetMaximized() = 0; 0214 virtual void setFullscreen(Output *output) = 0; 0215 virtual void unsetFullscreen() = 0; 0216 virtual void setMinimized() = 0; 0217 virtual void setMaxSize(const QSize &size) = 0; 0218 virtual void setMinSize(const QSize &size) = 0; 0219 virtual void setWindowGeometry(const QRect &windowGeometry) 0220 { 0221 Q_UNUSED(windowGeometry); 0222 } 0223 0224 protected: 0225 Private(XdgShellSurface *q); 0226 0227 XdgShellSurface *q; 0228 }; 0229 0230 class Q_DECL_HIDDEN XdgShellPopup::Private 0231 { 0232 public: 0233 Private(XdgShellPopup *q); 0234 virtual ~Private(); 0235 0236 EventQueue *queue = nullptr; 0237 0238 virtual void setupV5(xdg_popup *p) 0239 { 0240 Q_UNUSED(p) 0241 } 0242 virtual void setupV6(zxdg_surface_v6 *s, zxdg_popup_v6 *p) 0243 { 0244 Q_UNUSED(s) 0245 Q_UNUSED(p) 0246 } 0247 virtual void setup(xdg_surface *s, xdg_popup *p) 0248 { 0249 Q_UNUSED(s) 0250 Q_UNUSED(p) 0251 } 0252 virtual void release() = 0; 0253 virtual void destroy() = 0; 0254 virtual bool isValid() const = 0; 0255 virtual void requestGrab(Seat *seat, quint32 serial) 0256 { 0257 Q_UNUSED(seat); 0258 Q_UNUSED(serial); 0259 }; 0260 virtual void ackConfigure(quint32 serial) 0261 { 0262 Q_UNUSED(serial); 0263 } 0264 0265 virtual void setWindowGeometry(const QRect &windowGeometry) 0266 { 0267 Q_UNUSED(windowGeometry); 0268 } 0269 0270 virtual operator xdg_surface *() 0271 { 0272 return nullptr; 0273 } 0274 virtual operator xdg_surface *() const 0275 { 0276 return nullptr; 0277 } 0278 virtual operator xdg_popup *() 0279 { 0280 return nullptr; 0281 } 0282 virtual operator xdg_popup *() const 0283 { 0284 return nullptr; 0285 } 0286 virtual operator zxdg_surface_v6 *() 0287 { 0288 return nullptr; 0289 } 0290 virtual operator zxdg_surface_v6 *() const 0291 { 0292 return nullptr; 0293 } 0294 virtual operator zxdg_popup_v6 *() 0295 { 0296 return nullptr; 0297 } 0298 virtual operator zxdg_popup_v6 *() const 0299 { 0300 return nullptr; 0301 } 0302 0303 protected: 0304 XdgShellPopup *q; 0305 0306 private: 0307 }; 0308 0309 class XdgPositioner::Private 0310 { 0311 public: 0312 QSize initialSize; 0313 QRect anchorRect; 0314 Qt::Edges gravity; 0315 Qt::Edges anchorEdge; 0316 XdgPositioner::Constraints constraints; 0317 QPoint anchorOffset; 0318 }; 0319 0320 class XdgShellPopupUnstableV5 : public XdgShellPopup 0321 { 0322 public: 0323 ~XdgShellPopupUnstableV5() override; 0324 0325 private: 0326 explicit XdgShellPopupUnstableV5(QObject *parent = nullptr); 0327 friend class XdgShellUnstableV5; 0328 class Private; 0329 }; 0330 0331 class XdgShellPopupUnstableV6 : public XdgShellPopup 0332 { 0333 public: 0334 ~XdgShellPopupUnstableV6() override; 0335 0336 private: 0337 explicit XdgShellPopupUnstableV6(QObject *parent = nullptr); 0338 friend class XdgShellUnstableV6; 0339 class Private; 0340 }; 0341 0342 } 0343 } 0344 0345 #endif