diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index b6a505375f..960bc81a57 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -4282,6 +4282,9 @@ void *QGuiApplication::resolveInterface(const char *name, int revision) const #if QT_CONFIG(xcb) QT_NATIVE_INTERFACE_RETURN_IF(QX11Application, platformNativeInterface()); #endif +#if defined(Q_OS_UNIX) + QT_NATIVE_INTERFACE_RETURN_IF(QWaylandApplication, platformNativeInterface()); +#endif return QCoreApplication::resolveInterface(name, revision); } diff --git a/src/gui/kernel/qguiapplication_platform.h b/src/gui/kernel/qguiapplication_platform.h index 24ee166ac0..b6182e42a3 100644 --- a/src/gui/kernel/qguiapplication_platform.h +++ b/src/gui/kernel/qguiapplication_platform.h @@ -23,6 +23,15 @@ typedef struct _XDisplay Display; struct xcb_connection_t; #endif +#if defined(Q_OS_UNIX) +struct wl_display; +struct wl_compositor; +struct wl_seat; +struct wl_keyboard; +struct wl_pointer; +struct wl_touch; +#endif + QT_BEGIN_NAMESPACE namespace QNativeInterface @@ -37,6 +46,21 @@ struct Q_GUI_EXPORT QX11Application }; #endif +#if defined(Q_OS_UNIX) || defined(Q_CLANG_QDOC) +struct Q_GUI_EXPORT QWaylandApplication +{ + QT_DECLARE_NATIVE_INTERFACE(QWaylandApplication, 1, QGuiApplication) + virtual wl_display *display() const = 0; + virtual wl_compositor *compositor() const = 0; + virtual wl_seat *seat() const = 0; + virtual wl_keyboard *keyboard() const = 0; + virtual wl_pointer *pointer() const = 0; + virtual wl_touch *touch() const = 0; + virtual uint lastInputSerial() const = 0; + virtual wl_seat *lastInputSeat() const = 0; +}; +#endif + } // QNativeInterface QT_END_NAMESPACE diff --git a/src/gui/platform/unix/qunixnativeinterface.cpp b/src/gui/platform/unix/qunixnativeinterface.cpp index 60a96932e6..7d60d325c7 100644 --- a/src/gui/platform/unix/qunixnativeinterface.cpp +++ b/src/gui/platform/unix/qunixnativeinterface.cpp @@ -215,4 +215,49 @@ QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QEvdevKeyMapper); #endif // QT_CONFIG(evdev) +#if defined(Q_OS_UNIX) + +/*! + \class QNativeInterface::QWaylandApplication + \since 6.5 + \brief Native interface to a Wayland application. + + Accessed through QGuiApplication::nativeInterface(). + \inmodule QtGui + \ingroup native-interfaces + \ingroup native-interfaces-qguiapplication +*/ +/*! + \fn wl_display *QNativeInterface::QWaylandApplication::display() const + \return the wl_display that the application is using. +*/ +/*! + \fn wl_compositor *QNativeInterface::QWaylandApplication::compositor() const + \return the wl_compositor that the application is using. +*/ +/*! + \fn wl_keyboard *QNativeInterface::QWaylandApplication::keyboard() const + \return the wl_keyboard belonging to seat() if available. +*/ +/*! + \fn wl_pointer *QNativeInterface::QWaylandApplication::pointer() const + \return the wl_pointer belonging to seat() if available. +*/ +/*! + \fn wl_touch *QNativeInterface::QWaylandApplication::touch() const + \return the wl_touch belonging to seat() if available. +*/ +/*! + \fn uint *QNativeInterface::QWaylandApplication::lastInputSerial() const + \return the serial of the last input event on any seat. +*/ +/*! + \fn wl_seat *QNativeInterface::QWaylandApplication::lastInputSeat() const + \return the seat on which the last input event happened. +*/ + +QT_DEFINE_NATIVE_INTERFACE(QWaylandApplication); + +#endif // Q_OS_UNIX + QT_END_NAMESPACE