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 <aleixpol@kde.org>
This commit is contained in:
David Redondo 2022-10-11 16:16:39 +02:00
parent 3b9330cd40
commit bb18767af1
3 changed files with 72 additions and 0 deletions

View File

@ -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);
}

View File

@ -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

View File

@ -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