Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qwaylandcompositorextension.h
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QWAYLANDEXTENSION_H
6#define QWAYLANDEXTENSION_H
7
8#include <QtWaylandCompositor/qtwaylandcompositorglobal.h>
9#include <QtWaylandCompositor/qtwaylandqmlinclude.h>
10
11#include <QtCore/QObject>
12
13struct wl_interface;
14
15QT_BEGIN_NAMESPACE
16
17class QWaylandCompositor;
18class QWaylandCompositorExtension;
19class QWaylandCompositorExtensionPrivate;
20
21class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandObject : public QObject
22{
23 Q_OBJECT
24public:
25 ~QWaylandObject() override;
26
27 QWaylandCompositorExtension *extension(const QByteArray &name);
28 QWaylandCompositorExtension *extension(const wl_interface *interface);
29 QList<QWaylandCompositorExtension *> extensions() const;
30 void addExtension(QWaylandCompositorExtension *extension);
31 void removeExtension(QWaylandCompositorExtension *extension);
32
33protected:
34 QWaylandObject(QObject *parent = nullptr);
35 QWaylandObject(QObjectPrivate &d, QObject *parent = nullptr);
36 QList<QWaylandCompositorExtension *> extension_vector;
37};
38
39class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandCompositorExtension : public QWaylandObject
40{
41 Q_OBJECT
42 Q_DECLARE_PRIVATE(QWaylandCompositorExtension)
43 QML_NAMED_ELEMENT(WaylandExtension)
44 QML_ADDED_IN_VERSION(1, 0)
45 QML_UNCREATABLE("")
46public:
47 QWaylandCompositorExtension();
48 QWaylandCompositorExtension(QWaylandObject *container);
49 ~QWaylandCompositorExtension() override;
50
51 QWaylandObject *extensionContainer() const;
52 void setExtensionContainer(QWaylandObject *container);
53
54 virtual void initialize();
55 bool isInitialized() const;
56
57 virtual const struct wl_interface *extensionInterface() const = 0;
58
59protected:
60 QWaylandCompositorExtension(QWaylandCompositorExtensionPrivate &dd);
61 QWaylandCompositorExtension(QWaylandObject *container, QWaylandCompositorExtensionPrivate &dd);
62
63 bool event(QEvent *event) override;
64};
65
66template <typename T>
67class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandCompositorExtensionTemplate : public QWaylandCompositorExtension
68{
69public:
70 QWaylandCompositorExtensionTemplate()
71 : QWaylandCompositorExtension()
72 { }
73
74 QWaylandCompositorExtensionTemplate(QWaylandObject *container)
75 : QWaylandCompositorExtension(container)
76 { }
77
78 const struct wl_interface *extensionInterface() const override
79 {
80 return T::interface();
81 }
82
83 static T *findIn(QWaylandObject *container)
84 {
85 if (!container) return nullptr;
86 return qobject_cast<T *>(container->extension(T::interfaceName()));
87 }
88
89protected:
90 QWaylandCompositorExtensionTemplate(QWaylandCompositorExtensionPrivate &dd)
91 : QWaylandCompositorExtension(dd)
92 { }
93
94 QWaylandCompositorExtensionTemplate(QWaylandObject *container, QWaylandCompositorExtensionPrivate &dd)
95 : QWaylandCompositorExtension(container,dd)
96 { }
97};
98
99QT_END_NAMESPACE
100
101#endif
\inmodule QtWaylandCompositor
\inmodule QtWaylandCompositor