4#ifndef QWAYLANDDISPLAY_H
5#define QWAYLANDDISPLAY_H
18#include <QtCore/QList>
19#include <QtCore/QObject>
20#include <QtCore/QPointer>
21#include <QtCore/QRect>
22#include <QtCore/QMutex>
23#include <QtCore/QReadWriteLock>
25#include <QtCore/QWaitCondition>
26#include <QtCore/QLoggingCategory>
28#include <QtWaylandClient/private/qwayland-wayland.h>
29#include <QtWaylandClient/private/qtwaylandclientglobal_p.h>
30#include <QtWaylandClient/private/qwaylandshm_p.h>
32#include <qpa/qplatforminputcontextfactory_p.h>
34#if QT_CONFIG(xkbcommon)
35#include <QtGui/private/qxkbcommon_p.h>
38struct wl_cursor_image;
49 class qt_surface_extension;
50 class zwp_text_input_manager_v1;
51 class zwp_text_input_manager_v2;
52 class zwp_text_input_manager_v4;
53 class qt_text_input_method_manager_v1;
54 class wp_cursor_shape_manager_v1;
55 class wp_fractional_scale_manager_v1;
57 class qt_toplevel_drag_manager_v1;
71#if QT_CONFIG(wayland_client_primary_selection)
74#if QT_CONFIG(tabletevent)
86class QWaylandCursorTheme;
90 struct wl_registry *registry,
104#if QT_CONFIG(xkbcommon)
105 struct xkb_context *xkbContext()
const {
return mXkbContext.get(); }
115 struct wl_surface *createSurface(
void *
handle);
116 struct ::wl_region *createRegion(
const QRegion &qregion);
125 QWaylandCursor *waylandCursor();
126 QWaylandCursorTheme *loadCursorTheme(
const QString &
name,
int pixelSize);
131 const struct wl_compositor *
wl_compositor()
const {
return mCompositor.object(); }
132 QtWayland::wl_compositor *
compositor() {
return &mCompositor; }
137#if QT_CONFIG(wayland_datadevice)
140 return mGlobals.dndSelectionHandler.get();
143#if QT_CONFIG(wayland_client_primary_selection)
144 QWaylandPrimarySelectionDeviceManagerV1 *primarySelectionManager()
const
146 return mGlobals.primarySelectionManager.get();
151 return mGlobals.surfaceExtension.get();
153#if QT_CONFIG(tabletevent)
156 return mGlobals.tabletManager.get();
161 return mGlobals.pointerGestures.get();
165 return mGlobals.touchExtension.get();
169 return mGlobals.textInputMethodManager.get();
173 return mGlobals.textInputManagerv1.get();
177 return mGlobals.textInputManagerv2.get();
181 return mGlobals.textInputManagerv4.get();
185 return mGlobals.hardwareIntegration.get();
189 return mGlobals.xdgOutputManager.get();
193 return mGlobals.fractionalScaleManager.get();
197 return mGlobals.viewporter.get();
201 return mGlobals.cursorShapeManager.get();
205 return mGlobals.xdgToplevelDragManager.get();
212 struct ::wl_registry *registry =
nullptr;
214 :
id(id_),
interface(interface_), version(version_), registry(registry_) { }
218 return mRegistryGlobals;
220 bool hasRegistryGlobal(
QStringView interfaceName)
const;
224 void addRegistryListener(RegistryListener listener,
void *
data);
225 void removeListener(RegistryListener listener,
void *
data);
229 static uint32_t currentTimeMillisec();
231 void forceRoundTrip();
233 bool supportsWindowDecoration()
const;
248 bool isKeyboardAvailable()
const;
249 bool isClientSideInputContextRequested()
const;
251 void initEventThread();
254 void blockingReadEvents();
255 void flushRequests();
263 void checkWaylandError();
265 void setupConnection();
266 void handleWaylandSync();
267 void requestWaylandSync();
269 void checkTextInputProtocol();
272 Listener() =
default;
273 Listener(RegistryListener incomingListener,
275 : listener(incomingListener),
data(incomingData)
278 void *
data =
nullptr;
281 struct wl_display *mDisplay =
nullptr;
282 std::unique_ptr<EventThread> m_eventThread;
283 wl_event_queue *m_frameEventQueue =
nullptr;
285 QtWayland::wl_compositor mCompositor;
292 QWaylandIntegration *mWaylandIntegration =
nullptr;
294 struct WaylandCursorTheme {
297 std::unique_ptr<QWaylandCursorTheme> theme;
299 std::vector<WaylandCursorTheme> mCursorThemes;
301 struct FindExistingCursorThemeResult {
302 std::vector<WaylandCursorTheme>::const_iterator
position;
305 QWaylandCursorTheme *theme() const noexcept
306 {
return found ?
position->theme.get() :
nullptr; }
308 FindExistingCursorThemeResult findExistingCursorTheme(
const QString &
name,
309 int pixelSize)
const noexcept;
317#if QT_CONFIG(wayland_datadevice)
318 std::unique_ptr<QWaylandDataDeviceManager> dndSelectionHandler;
320 std::unique_ptr<QtWayland::qt_surface_extension> surfaceExtension;
321 std::unique_ptr<QtWayland::wl_subcompositor> subCompositor;
322 std::unique_ptr<QWaylandTouchExtension> touchExtension;
323 std::unique_ptr<QWaylandQtKeyExtension> qtKeyExtension;
324#if QT_CONFIG(tabletevent)
325 std::unique_ptr<QWaylandTabletManagerV2> tabletManager;
327 std::unique_ptr<QWaylandPointerGestures> pointerGestures;
328#if QT_CONFIG(wayland_client_primary_selection)
329 std::unique_ptr<QWaylandPrimarySelectionDeviceManagerV1> primarySelectionManager;
331 std::unique_ptr<QtWayland::qt_text_input_method_manager_v1> textInputMethodManager;
332 std::unique_ptr<QtWayland::zwp_text_input_manager_v1> textInputManagerv1;
333 std::unique_ptr<QtWayland::zwp_text_input_manager_v2> textInputManagerv2;
334 std::unique_ptr<QtWayland::zwp_text_input_manager_v4> textInputManagerv4;
335 std::unique_ptr<QWaylandHardwareIntegration> hardwareIntegration;
336 std::unique_ptr<QWaylandXdgOutputManagerV1> xdgOutputManager;
337 std::unique_ptr<QtWayland::wp_viewporter> viewporter;
338 std::unique_ptr<QtWayland::wp_fractional_scale_manager_v1> fractionalScaleManager;
339 std::unique_ptr<QtWayland::wp_cursor_shape_manager_v1> cursorShapeManager;
340 std::unique_ptr<QtWayland::qt_toplevel_drag_manager_v1> xdgToplevelDragManager;
344 int mWritableNotificationFd = -1;
346 uint32_t mLastInputSerial = 0;
347 QWaylandInputDevice *mLastInputDevice =
nullptr;
351 struct wl_callback *mSyncCallback =
nullptr;
352 static const wl_callback_listener syncCallbackListener;
353 bool mWaylandTryReconnect =
false;
355 bool mClientSideInputContextRequested = [] () {
360 int mTextInputManagerIndex = INT_MAX;
362 void registry_global(uint32_t
id,
const QString &
interface, uint32_t version)
override;
363 void registry_global_remove(uint32_t
id)
override;
365#if QT_CONFIG(xkbcommon)
IOBluetoothDevice * device
static QString requested()
The QRegion class specifies a clip region for a painter.
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
std::unique_ptr< struct xkb_context, XKBContextDeleter > ScopedXKBContext
void globalAdded(const RegistryGlobal &global)
QtWayland::qt_surface_extension * windowExtension() const
const struct wl_compositor * wl_compositor() const
QtWayland::zwp_text_input_manager_v4 * textInputManagerv4() const
uint32_t lastInputSerial() const
QWaylandTouchExtension * touchExtension() const
QList< QWaylandInputDevice * > inputDevices() const
QPlatformPlaceholderScreen * placeholderScreen() const
QtWayland::wl_compositor * compositor()
QWaylandInputDevice * lastInputDevice() const
QtWayland::wp_cursor_shape_manager_v1 * cursorShapeManager() const
QWaylandInputDevice * currentInputDevice() const
QtWayland::wp_fractional_scale_manager_v1 * fractionalScaleManager() const
QList< RegistryGlobal > globals() const
QtWayland::zwp_text_input_manager_v1 * textInputManagerv1() const
void globalRemoved(const RegistryGlobal &global)
QWaylandShm * shm() const
QWaylandPointerGestures * pointerGestures() const
QtWayland::qt_toplevel_drag_manager_v1 * xdgToplevelDragManager() const
QWaylandXdgOutputManagerV1 * xdgOutputManager() const
QtWayland::zwp_text_input_manager_v2 * textInputManagerv2() const
struct wl_display * wl_display() const
wl_event_queue * frameEventQueue()
QtWayland::qt_text_input_method_manager_v1 * textInputMethodManager() const
struct::wl_registry * wl_registry()
QtWayland::wp_viewporter * viewporter() const
QList< QWaylandScreen * > screens() const
QWaylandHardwareIntegration * hardwareIntegration() const
Combined button and popup list for selecting options.
void(* RegistryListener)(void *data, struct wl_registry *registry, uint32_t id, const QString &interface, uint32_t version)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char * interface
#define Q_DECLARE_LOGGING_CATEGORY(name)
GLuint64 GLenum void * handle
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
QLatin1StringView QLatin1String
QT_BEGIN_NAMESPACE typedef uchar * output
RegistryGlobal(uint32_t id_, const QString &interface_, uint32_t version_, struct ::wl_registry *registry_)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent