49class Q_WAYLANDCOMPOSITOR_EXPORT
QWaylandCompositorPrivate :
public QObjectPrivate,
public QtWaylandServer::wl_compositor,
public QtWaylandServer::wl_subcompositor
52 static QWaylandCompositorPrivate *get(QWaylandCompositor *compositor) {
return compositor->d_func(); }
54 QWaylandCompositorPrivate(QWaylandCompositor *compositor);
55 ~QWaylandCompositorPrivate() override;
57#if QT_CONFIG(xkbcommon)
58 struct xkb_context *xkbContext()
const {
return mXkbContext.get(); }
64 void destroySurface(QWaylandSurface *surface);
65 void unregisterSurface(QWaylandSurface *surface);
67 QWaylandOutput *defaultOutput()
const {
return outputs.size() ? outputs.first() :
nullptr; }
69 inline const QList<QtWayland::ClientBufferIntegration *> clientBufferIntegrations()
const;
70 inline QtWayland::ServerBufferIntegration *serverBufferIntegration()
const;
72#if QT_CONFIG(wayland_datadevice)
73 QtWayland::DataDeviceManager *dataDeviceManager()
const {
return data_device_manager; }
75 QtWayland::BufferManager *bufferManager()
const {
return buffer_manager; }
76 void feedRetainedSelectionData(QMimeData *data);
78 QWaylandPointer *callCreatePointerDevice(QWaylandSeat *seat)
79 {
return q_func()->createPointerDevice(seat); }
80 QWaylandKeyboard *callCreateKeyboardDevice(QWaylandSeat *seat)
81 {
return q_func()->createKeyboardDevice(seat); }
82 QWaylandTouch *callCreateTouchDevice(QWaylandSeat *seat)
83 {
return q_func()->createTouchDevice(seat); }
85 inline void addClient(QWaylandClient *client);
86 inline void removeClient(QWaylandClient *client);
88 void addPolishObject(QObject *object);
90 inline void addOutput(QWaylandOutput *output);
91 inline void removeOutput(QWaylandOutput *output);
93 void connectToExternalSockets();
95 virtual QWaylandSeat *seatFor(QInputEvent *inputEvent);
98 void compositor_create_surface(wl_compositor::Resource *resource, uint32_t id) override;
99 void compositor_create_region(wl_compositor::Resource *resource, uint32_t id) override;
101 void subcompositor_get_subsurface(wl_subcompositor::Resource *resource, uint32_t id,
struct ::wl_resource *surface,
struct ::wl_resource *parent) override;
103 virtual QWaylandSurface *createDefaultSurface();
105 void initializeHardwareIntegration();
106 void initializeExtensions();
107 void initializeSeats();
109 void loadClientBufferIntegration();
110 void loadServerBufferIntegration();
112 QByteArray socket_name;
113 QList<
int> externally_added_socket_fds;
114 struct wl_display *display =
nullptr;
115 bool ownsDisplay =
false;
116 QVector<QWaylandCompositor::ShmFormat> shmFormats;
118 QList<QWaylandSeat *> seats;
119 QList<QWaylandOutput *> outputs;
121 QList<QWaylandSurface *> all_surfaces;
123#if QT_CONFIG(wayland_datadevice)
124 QtWayland::DataDeviceManager *data_device_manager =
nullptr;
126 QtWayland::BufferManager *buffer_manager =
nullptr;
130 wl_event_loop *loop =
nullptr;
132 QList<QWaylandClient *> clients;
135 bool use_hw_integration_extension =
true;
136 QScopedPointer<QtWayland::HardwareIntegration> hw_integration;
137 QScopedPointer<QtWayland::ServerBufferIntegration> server_buffer_integration;
139 QList<QtWayland::ClientBufferIntegration*> client_buffer_integrations;
141 QScopedPointer<QWindowSystemEventHandler> eventHandler;
143 bool retainSelection =
false;
144 bool preInitialized =
false;
145 bool initialized =
false;
146 std::vector<QPointer<QObject> > polish_objects;
148#if QT_CONFIG(xkbcommon)
149 QXkbCommon::ScopedXKBContext mXkbContext;
152 Q_DECLARE_PUBLIC(QWaylandCompositor)
153 Q_DISABLE_COPY(QWaylandCompositorPrivate)