From bb18767af181447bcbaf2d6dd51c94880a4eebce Mon Sep 17 00:00:00 2001 From: David Redondo Date: Tue, 11 Oct 2022 16:16:39 +0200 Subject: [PATCH] Add QNativeInterface::QWaylandApplication This exposes the same objects that were ere available through QPlatformNativeInterface except egldisplay for which we may find a better place. [ChangeLog][QtWaylandClient][QGuiApplication] Add QNativeInterface::QWaylandApplication that allows to access central native wayland objects. Task-number: QTBUG-94729 Change-Id: I8611522a4c9bddec3afbb5f183ffa68565f61f68 Reviewed-by: Aleix Pol Gonzalez --- src/gui/kernel/qguiapplication.cpp | 3 ++ src/gui/kernel/qguiapplication_platform.h | 24 ++++++++++ .../platform/unix/qunixnativeinterface.cpp | 45 +++++++++++++++++++ 3 files changed, 72 insertions(+) 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