Qt 6.x
The Qt SDK
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
qwaylandcompositor_p.h
Go to the documentation of this file.
1// Copyright (C) 2017-2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
2// Copyright (C) 2017 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4
5#ifndef QWAYLANDCOMPOSITOR_P_H
6#define QWAYLANDCOMPOSITOR_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h>
20#include <QtWaylandCompositor/QWaylandCompositor>
21#include <QtCore/private/qobject_p.h>
22#include <QtCore/QSet>
23#include <QtCore/QElapsedTimer>
24
25#include <QtWaylandCompositor/private/qwayland-server-wayland.h>
26
27#include <vector>
28
29#if QT_CONFIG(xkbcommon)
30#include <QtGui/private/qxkbcommon_p.h>
31#endif
32
34
35namespace QtWayland {
36 class HardwareIntegration;
37 class ClientBufferIntegration;
38 class ServerBufferIntegration;
39 class DataDeviceManager;
40 class BufferManager;
41}
42
44class QWaylandSurface;
45
46class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandCompositorPrivate : public QObjectPrivate, public QtWaylandServer::wl_compositor, public QtWaylandServer::wl_subcompositor
47{
48public:
50
53
54#if QT_CONFIG(xkbcommon)
55 struct xkb_context *xkbContext() const { return mXkbContext.get(); }
56#endif
57
58 void preInit();
59 void init();
60
61 void destroySurface(QWaylandSurface *surface);
62 void unregisterSurface(QWaylandSurface *surface);
63
64 QWaylandOutput *defaultOutput() const { return outputs.size() ? outputs.first() : nullptr; }
65
66 inline const QList<QtWayland::ClientBufferIntegration *> clientBufferIntegrations() const;
67 inline QtWayland::ServerBufferIntegration *serverBufferIntegration() const;
68
69#if QT_CONFIG(wayland_datadevice)
70 QtWayland::DataDeviceManager *dataDeviceManager() const { return data_device_manager; }
71#endif
72 QtWayland::BufferManager *bufferManager() const { return buffer_manager; }
73 void feedRetainedSelectionData(QMimeData *data);
74
76 { return q_func()->createPointerDevice(seat); }
78 { return q_func()->createKeyboardDevice(seat); }
80 { return q_func()->createTouchDevice(seat); }
81
82 inline void addClient(QWaylandClient *client);
83 inline void removeClient(QWaylandClient *client);
84
85 void addPolishObject(QObject *object);
86
87 inline void addOutput(QWaylandOutput *output);
88 inline void removeOutput(QWaylandOutput *output);
89
90 void connectToExternalSockets();
91
92 virtual QWaylandSeat *seatFor(QInputEvent *inputEvent);
93
94protected:
95 void compositor_create_surface(wl_compositor::Resource *resource, uint32_t id) override;
96 void compositor_create_region(wl_compositor::Resource *resource, uint32_t id) override;
97
98 void subcompositor_get_subsurface(wl_subcompositor::Resource *resource, uint32_t id, struct ::wl_resource *surface, struct ::wl_resource *parent) override;
99
100 virtual QWaylandSurface *createDefaultSurface();
101protected:
102 void initializeHardwareIntegration();
104 void initializeSeats();
105
106 void loadClientBufferIntegration();
107 void loadServerBufferIntegration();
108
111 struct wl_display *display = nullptr;
112 bool ownsDisplay = false;
114
117
119
120#if QT_CONFIG(wayland_datadevice)
121 QtWayland::DataDeviceManager *data_device_manager = nullptr;
122#endif
123 QtWayland::BufferManager *buffer_manager = nullptr;
124
126
127 wl_event_loop *loop = nullptr;
128
130
131#if QT_CONFIG(opengl)
132 bool use_hw_integration_extension = true;
135#endif
137
139
140 bool retainSelection = false;
141 bool preInitialized = false;
142 bool initialized = false;
143 std::vector<QPointer<QObject> > polish_objects;
144
145#if QT_CONFIG(xkbcommon)
147#endif
148
149 Q_DECLARE_PUBLIC(QWaylandCompositor)
150 Q_DISABLE_COPY(QWaylandCompositorPrivate)
151};
152
154{
156}
157
159{
160#if QT_CONFIG(opengl)
161 return server_buffer_integration.data();
162#else
163 return 0;
164#endif
165}
166
168{
169 Q_ASSERT(!clients.contains(client));
170 clients.append(client);
171}
172
174{
175 Q_ASSERT(clients.contains(client));
176 clients.removeOne(client);
177}
178
180{
184 return;
186 emit q->outputAdded(output);
187}
188
190{
195 emit q->outputRemoved(output);
196}
197
199
200#endif //QWAYLANDCOMPOSITOR_P_H
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore
\inmodule QtGui
Definition qevent.h:49
Definition qlist.h:74
bool removeOne(const AT &t)
Definition qlist.h:581
qsizetype count() const noexcept
Definition qlist.h:387
void append(parameter_type t)
Definition qlist.h:441
\inmodule QtCore
Definition qmimedata.h:16
\inmodule QtCore
Definition qobject.h:90
\inmodule QtCore
\qmltype WaylandClient \instantiates QWaylandClient \inqmlmodule QtWayland.Compositor
QWaylandKeyboard * callCreateKeyboardDevice(QWaylandSeat *seat)
QList< QWaylandOutput * > outputs
void removeOutput(QWaylandOutput *output)
QList< QWaylandSeat * > seats
void addOutput(QWaylandOutput *output)
QWaylandPointer * callCreatePointerDevice(QWaylandSeat *seat)
static QWaylandCompositorPrivate * get(QWaylandCompositor *compositor)
void removeClient(QWaylandClient *client)
const QList< QtWayland::ClientBufferIntegration * > clientBufferIntegrations() const
QList< QWaylandClient * > clients
void addClient(QWaylandClient *client)
QList< QtWayland::ClientBufferIntegration * > client_buffer_integrations
QtWayland::ServerBufferIntegration * serverBufferIntegration() const
QWaylandOutput * defaultOutput() const
std::vector< QPointer< QObject > > polish_objects
QtWayland::BufferManager * bufferManager() const
QList< QWaylandSurface * > all_surfaces
QVector< QWaylandCompositor::ShmFormat > shmFormats
QWaylandTouch * callCreateTouchDevice(QWaylandSeat *seat)
QScopedPointer< QWindowSystemEventHandler > eventHandler
\qmltype WaylandCompositor \instantiates QWaylandCompositor \inqmlmodule QtWayland....
\inmodule QtWaylandCompositor
\qmltype WaylandOutput \instantiates QWaylandOutput \inqmlmodule QtWayland.Compositor
\inmodule QtWaylandCompositor
\qmltype WaylandSeat \instantiates QWaylandSeat \inqmlmodule QtWayland.Compositor
\qmltype WaylandSurface \instantiates QWaylandSurface \inqmlmodule QtWayland.Compositor
\inmodule QtWaylandCompositor
std::unique_ptr< struct xkb_context, XKBContextDeleter > ScopedXKBContext
struct wl_display * display
Definition linuxdmabuf.h:41
Combined button and popup list for selecting options.
void destroySurface(int surfaceId)
static QOpenGLCompositor * compositor
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
#define emit
QT_BEGIN_NAMESPACE typedef uchar * output
bool contains(const AT &t) const noexcept
Definition qlist.h:44
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent