Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
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 <QtCore/qpointer.h>
28
29#include <vector>
30
31#if QT_CONFIG(xkbcommon)
32#include <QtGui/private/qxkbcommon_p.h>
33#endif
34
36
37namespace QtWayland {
38 class HardwareIntegration;
39 class ClientBufferIntegration;
40 class ServerBufferIntegration;
41 class DataDeviceManager;
42 class BufferManager;
43}
44
46class QWaylandSurface;
47
48class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandCompositorPrivate : public QObjectPrivate, public QtWaylandServer::wl_compositor, public QtWaylandServer::wl_subcompositor
49{
50public:
52
55
56#if QT_CONFIG(xkbcommon)
57 struct xkb_context *xkbContext() const { return mXkbContext.get(); }
58#endif
59
60 void preInit();
61 void init();
62
63 void destroySurface(QWaylandSurface *surface);
64 void unregisterSurface(QWaylandSurface *surface);
65
66 QWaylandOutput *defaultOutput() const { return outputs.size() ? outputs.first() : nullptr; }
67
68 inline const QList<QtWayland::ClientBufferIntegration *> clientBufferIntegrations() const;
69 inline QtWayland::ServerBufferIntegration *serverBufferIntegration() const;
70
71#if QT_CONFIG(wayland_datadevice)
72 QtWayland::DataDeviceManager *dataDeviceManager() const { return data_device_manager; }
73#endif
74 QtWayland::BufferManager *bufferManager() const { return buffer_manager; }
75 void feedRetainedSelectionData(QMimeData *data);
76
78 { return q_func()->createPointerDevice(seat); }
80 { return q_func()->createKeyboardDevice(seat); }
82 { return q_func()->createTouchDevice(seat); }
83
84 inline void addClient(QWaylandClient *client);
85 inline void removeClient(QWaylandClient *client);
86
87 void addPolishObject(QObject *object);
88
89 inline void addOutput(QWaylandOutput *output);
90 inline void removeOutput(QWaylandOutput *output);
91
92 void connectToExternalSockets();
93
94 virtual QWaylandSeat *seatFor(QInputEvent *inputEvent);
95
96protected:
97 void compositor_create_surface(wl_compositor::Resource *resource, uint32_t id) override;
98 void compositor_create_region(wl_compositor::Resource *resource, uint32_t id) override;
99
100 void subcompositor_get_subsurface(wl_subcompositor::Resource *resource, uint32_t id, struct ::wl_resource *surface, struct ::wl_resource *parent) override;
101
102 virtual QWaylandSurface *createDefaultSurface();
103protected:
104 void initializeHardwareIntegration();
106 void initializeSeats();
107
108 void loadClientBufferIntegration();
109 void loadServerBufferIntegration();
110
113 struct wl_display *display = nullptr;
114 bool ownsDisplay = false;
115 QVector<QWaylandCompositor::ShmFormat> shmFormats;
116
117 QList<QWaylandSeat *> seats;
118 QList<QWaylandOutput *> outputs;
119
120 QList<QWaylandSurface *> all_surfaces;
121
122#if QT_CONFIG(wayland_datadevice)
123 QtWayland::DataDeviceManager *data_device_manager = nullptr;
124#endif
125 QtWayland::BufferManager *buffer_manager = nullptr;
126
128
129 wl_event_loop *loop = nullptr;
130
131 QList<QWaylandClient *> clients;
132
133#if QT_CONFIG(opengl)
134 bool use_hw_integration_extension = true;
135 QScopedPointer<QtWayland::HardwareIntegration> hw_integration;
136 QScopedPointer<QtWayland::ServerBufferIntegration> server_buffer_integration;
137#endif
138 QList<QtWayland::ClientBufferIntegration*> client_buffer_integrations;
139
140 QScopedPointer<QWindowSystemEventHandler> eventHandler;
141
142 bool retainSelection = false;
143 bool preInitialized = false;
144 bool initialized = false;
145 std::vector<QPointer<QObject> > polish_objects;
146
147#if QT_CONFIG(xkbcommon)
149#endif
150
151 Q_DECLARE_PUBLIC(QWaylandCompositor)
152 Q_DISABLE_COPY(QWaylandCompositorPrivate)
153};
154
155const QList<QtWayland::ClientBufferIntegration *> QWaylandCompositorPrivate::clientBufferIntegrations() const
156{
158}
159
161{
162#if QT_CONFIG(opengl)
163 return server_buffer_integration.data();
164#else
165 return 0;
166#endif
167}
168
174
180
190
199
201
202#endif //QWAYLANDCOMPOSITOR_P_H
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore
\inmodule QtGui
Definition qevent.h:49
bool removeOne(const AT &t)
Definition qlist.h:598
qsizetype count() const noexcept
Definition qlist.h:398
void append(parameter_type t)
Definition qlist.h:458
\inmodule QtCore
Definition qmimedata.h:16
\inmodule QtCore
Definition qobject.h:103
\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.
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:45