diff --git a/src/gui/kernel/qplatformwindow_p.h b/src/gui/kernel/qplatformwindow_p.h index 62dc87779e..7a57c888e2 100644 --- a/src/gui/kernel/qplatformwindow_p.h +++ b/src/gui/kernel/qplatformwindow_p.h @@ -20,6 +20,12 @@ #include #include +#if defined(Q_OS_UNIX) +#include + +struct wl_surface; +#endif + QT_BEGIN_NAMESPACE class QMargins; @@ -89,6 +95,33 @@ struct Q_GUI_EXPORT QWindowsWindow }; #endif // Q_OS_WIN +#if defined(Q_OS_UNIX) +struct Q_GUI_EXPORT QWaylandWindow : public QObject +{ + Q_OBJECT +public: + QT_DECLARE_NATIVE_INTERFACE(QWaylandWindow, 1, QWindow) + + virtual wl_surface *surface() const = 0; + virtual void setCustomMargins(const QMargins &margins) = 0; + virtual void requestXdgActivationToken(uint serial) = 0; + template + T *surfaceRole() const + { + std::any anyRole = _surfaceRole(); + auto role = std::any_cast(&anyRole); + return role ? *role : nullptr; + } +signals: + void surfaceCreated(); + void surfaceDestroyed(); + void xdgActivationTokenCreated(const QString &token); + +protected: + virtual std::any _surfaceRole() const = 0; +}; +#endif + } // QNativeInterface::Private QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 13e2051e14..29976613aa 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -3027,6 +3027,10 @@ void *QWindow::resolveInterface(const char *name, int revision) const QT_NATIVE_INTERFACE_RETURN_IF(QCocoaWindow, platformWindow); #endif +#if defined(Q_OS_UNIX) + QT_NATIVE_INTERFACE_RETURN_IF(QWaylandWindow, platformWindow); +#endif + return nullptr; } diff --git a/src/gui/platform/unix/qunixnativeinterface.cpp b/src/gui/platform/unix/qunixnativeinterface.cpp index 1b9c6eb4f0..1cca97b34c 100644 --- a/src/gui/platform/unix/qunixnativeinterface.cpp +++ b/src/gui/platform/unix/qunixnativeinterface.cpp @@ -269,6 +269,17 @@ QT_DEFINE_NATIVE_INTERFACE(QWaylandApplication); QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QWaylandScreen); +/*! + \class QNativeInterface::QWaylandWindow + \since 6.5 + \internal + \brief Native interface to a Wayland window. + \inmodule QtGui + \ingroup native-interfaces +*/ + +QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QWaylandWindow); + #endif // Q_OS_UNIX QT_END_NAMESPACE