Source code

Revision control

Copy as Markdown

// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Qt-Security score:significant reason:default
#ifndef QWAYLANDQTSHELL_H
#define QWAYLANDQTSHELL_H
#include <QtWaylandCompositor/QWaylandCompositorExtension>
#include <QtWaylandCompositor/QWaylandSurface>
#include <QtWaylandCompositor/QWaylandResource>
#include <QtCore/QSize>
#include <QtWaylandCompositor/QWaylandShellSurface>
#include <QtWaylandCompositor/qwaylandquickchildren.h>
#include <QtWaylandCompositor/qwaylandquickextension.h>
struct wl_resource;
struct wl_interface;
QT_BEGIN_NAMESPACE
class QWaylandQtShellPrivate;
class QWaylandQtShellSurface;
class QWaylandQtShellChrome;
class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandQtShell : public QWaylandCompositorExtensionTemplate<QWaylandQtShell>
{
Q_OBJECT
Q_DECLARE_PRIVATE(QWaylandQtShell)
public:
QWaylandQtShell();
QWaylandQtShell(QWaylandCompositor *compositor);
void initialize() override;
static const struct wl_interface *interface();
static QByteArray interfaceName();
void registerChrome(QWaylandQtShellChrome *chrome);
void unregisterChrome(QWaylandQtShellChrome *chrome);
private Q_SLOTS:
void chromeActivated();
void chromeDeactivated();
Q_SIGNALS:
void qtShellSurfaceRequested(QWaylandSurface *surface, const QWaylandResource &resource);
void qtShellSurfaceCreated(QWaylandQtShellSurface *qtShellSurface);
private:
bool moveChromeToFront(QWaylandQtShellChrome *chrome);
};
Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_NAMED_ELEMENT(QWaylandQtShell, QtShell, 1, 0)
class QWaylandQtShellSurfacePrivate;
class QWaylandSurfaceRole;
class QWaylandResource;
class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandQtShellSurface : public QWaylandShellSurfaceTemplate<QWaylandQtShellSurface>
{
Q_OBJECT
QML_NAMED_ELEMENT(QtShellSurface)
QML_ADDED_IN_VERSION(1, 0)
Q_DECLARE_PRIVATE(QWaylandQtShellSurface)
Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandQtShellSurface)
Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged)
Q_PROPERTY(uint windowFlags READ windowFlags NOTIFY windowFlagsChanged)
Q_PROPERTY(uint windowState READ windowState NOTIFY windowStateChanged)
Q_PROPERTY(QString windowTitle READ windowTitle READ windowTitle NOTIFY windowTitleChanged)
Q_PROPERTY(QRect windowGeometry READ windowGeometry NOTIFY windowGeometryChanged)
Q_PROPERTY(QPoint windowPosition READ windowPosition WRITE setWindowPosition NOTIFY windowGeometryChanged)
Q_PROPERTY(bool positionAutomatic READ positionAutomatic NOTIFY positionAutomaticChanged)
Q_PROPERTY(QSize minimumSize READ minimumSize NOTIFY minimumSizeChanged)
Q_PROPERTY(QSize maximumSize READ maximumSize NOTIFY maximumSizeChanged)
Q_PROPERTY(int frameMarginLeft READ frameMarginLeft WRITE setFrameMarginLeft NOTIFY frameMarginChanged)
Q_PROPERTY(int frameMarginRight READ frameMarginRight WRITE setFrameMarginRight NOTIFY frameMarginChanged)
Q_PROPERTY(int frameMarginTop READ frameMarginTop WRITE setFrameMarginTop NOTIFY frameMarginChanged)
Q_PROPERTY(int frameMarginBottom READ frameMarginBottom WRITE setFrameMarginBottom NOTIFY frameMarginChanged)
Q_PROPERTY(bool active READ active WRITE setActive NOTIFY activeChanged)
Q_PROPERTY(CapabilityFlags capabilities READ capabilities WRITE setCapabilities NOTIFY capabilitiesChanged)
Q_MOC_INCLUDE("qwaylandsurface.h")
public:
// Matches the "capabilities" enum in the protocol xml
enum CapabilityFlag {
InteractiveMove = 1,
InteractiveResize = 2
};
Q_DECLARE_FLAGS(CapabilityFlags, CapabilityFlag)
Q_ENUM(CapabilityFlag)
QWaylandQtShellSurface();
QWaylandQtShellSurface(QWaylandQtShell *application, QWaylandSurface *surface, const QWaylandResource &resource);
void initialize(QWaylandQtShell *qtShell, QWaylandSurface *surface,
const QWaylandResource &resource);
QWaylandSurface *surface() const;
static const wl_interface *interface();
static QByteArray interfaceName();
static QWaylandSurfaceRole *role();
static QWaylandQtShellSurface *fromResource(::wl_resource *resource);
QRect windowGeometry() const;
void setWindowPosition(const QPoint &position);
QPoint windowPosition() const;
Q_INVOKABLE void requestWindowGeometry(uint windowState, const QRect &windowGeometry);
QSize minimumSize() const;
QSize maximumSize() const;
void setFrameMargins(const QMargins &margins);
int frameMarginLeft() const;
void setFrameMarginLeft(int left);
int frameMarginRight() const;
void setFrameMarginRight(int right);
int frameMarginTop() const;
void setFrameMarginTop(int top);
int frameMarginBottom() const;
void setFrameMarginBottom(int bottom);
bool positionAutomatic() const;
bool active() const;
void setActive(bool active);
QString windowTitle() const;
uint windowFlags() const;
Q_INVOKABLE void sendClose();
uint windowState() const;
void setWindowState(uint windowState);
#if QT_CONFIG(wayland_compositor_quick)
QWaylandQuickShellIntegration *createIntegration(QWaylandQuickShellSurfaceItem *item) override;
#endif
CapabilityFlags capabilities() const;
void setCapabilities(CapabilityFlags capabilities);
Q_SIGNALS:
void surfaceChanged();
void windowFlagsChanged();
void windowStateChanged();
void windowGeometryChanged();
void minimumSizeChanged();
void maximumSizeChanged();
void positionAutomaticChanged();
void startMove();
void startResize(Qt::Edges edges);
void windowTitleChanged();
void frameMarginChanged();
void raiseRequested();
void lowerRequested();
void activeChanged();
void capabilitiesChanged();
private Q_SLOTS:
void surfaceCommitted();
private:
friend class QWaylandQtShellChrome;
void initialize() override;
QWaylandQtShell *shell() const;
};
QT_END_NAMESPACE
#endif // QWAYLANDQTSHELL_H