48class Q_WAYLANDCOMPOSITOR_EXPORT
QWaylandCompositorPrivate :
public QObjectPrivate,
public QtWaylandServer::wl_compositor,
public QtWaylandServer::wl_subcompositor
51 static QWaylandCompositorPrivate *get(QWaylandCompositor *compositor) {
return compositor->d_func(); }
53 QWaylandCompositorPrivate(QWaylandCompositor *compositor);
54 ~QWaylandCompositorPrivate() override;
56#if QT_CONFIG(xkbcommon)
57 struct xkb_context *xkbContext()
const {
return mXkbContext.get(); }
63 void destroySurface(QWaylandSurface *surface);
64 void unregisterSurface(QWaylandSurface *surface);
66 QWaylandOutput *defaultOutput()
const {
return outputs.size() ? outputs.first() :
nullptr; }
68 inline const QList<QtWayland::ClientBufferIntegration *> clientBufferIntegrations()
const;
69 inline QtWayland::ServerBufferIntegration *serverBufferIntegration()
const;
71#if QT_CONFIG(wayland_datadevice)
72 QtWayland::DataDeviceManager *dataDeviceManager()
const {
return data_device_manager; }
74 QtWayland::BufferManager *bufferManager()
const {
return buffer_manager; }
75 void feedRetainedSelectionData(QMimeData *data);
77 QWaylandPointer *callCreatePointerDevice(QWaylandSeat *seat)
78 {
return q_func()->createPointerDevice(seat); }
79 QWaylandKeyboard *callCreateKeyboardDevice(QWaylandSeat *seat)
80 {
return q_func()->createKeyboardDevice(seat); }
81 QWaylandTouch *callCreateTouchDevice(QWaylandSeat *seat)
82 {
return q_func()->createTouchDevice(seat); }
84 inline void addClient(QWaylandClient *client);
85 inline void removeClient(QWaylandClient *client);
87 void addPolishObject(QObject *object);
89 inline void addOutput(QWaylandOutput *output);
90 inline void removeOutput(QWaylandOutput *output);
92 void connectToExternalSockets();
94 virtual QWaylandSeat *seatFor(QInputEvent *inputEvent);
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;
100 void subcompositor_get_subsurface(wl_subcompositor::Resource *resource, uint32_t id,
struct ::wl_resource *surface,
struct ::wl_resource *parent) override;
102 virtual QWaylandSurface *createDefaultSurface();
104 void initializeHardwareIntegration();
105 void initializeExtensions();
106 void initializeSeats();
108 void loadClientBufferIntegration();
109 void loadServerBufferIntegration();
111 QByteArray socket_name;
112 QList<
int> externally_added_socket_fds;
113 struct wl_display *display =
nullptr;
114 bool ownsDisplay =
false;
115 QVector<QWaylandCompositor::ShmFormat> shmFormats;
117 QList<QWaylandSeat *> seats;
118 QList<QWaylandOutput *> outputs;
120 QList<QWaylandSurface *> all_surfaces;
122#if QT_CONFIG(wayland_datadevice)
123 QtWayland::DataDeviceManager *data_device_manager =
nullptr;
125 QtWayland::BufferManager *buffer_manager =
nullptr;
129 wl_event_loop *loop =
nullptr;
131 QList<QWaylandClient *> clients;
134 bool use_hw_integration_extension =
true;
135 QScopedPointer<QtWayland::HardwareIntegration> hw_integration;
136 QScopedPointer<QtWayland::ServerBufferIntegration> server_buffer_integration;
138 QList<QtWayland::ClientBufferIntegration*> client_buffer_integrations;
140 QScopedPointer<QWindowSystemEventHandler> eventHandler;
142 bool retainSelection =
false;
143 bool preInitialized =
false;
144 bool initialized =
false;
145 std::vector<QPointer<QObject> > polish_objects;
147#if QT_CONFIG(xkbcommon)
148 QXkbCommon::ScopedXKBContext mXkbContext;
151 Q_DECLARE_PUBLIC(QWaylandCompositor)
152 Q_DISABLE_COPY(QWaylandCompositorPrivate)