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