diff options
Diffstat (limited to 'src/compositor')
-rw-r--r-- | src/compositor/compositor_api/compositor_api.pri | 1 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandcompositor.cpp | 2 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandtouch.cpp | 19 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandtouch_p.h | 2 | ||||
-rw-r--r-- | src/compositor/doc/src/qtwaylandcompositor-qmltypes.qdoc | 4 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandshell.cpp | 20 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandshell.h | 12 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandwlshell_p.h | 3 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandxdgshell_p.h | 3 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandxdgshellv5_p.h | 3 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandxdgshellv6_p.h | 3 |
11 files changed, 61 insertions, 11 deletions
diff --git a/src/compositor/compositor_api/compositor_api.pri b/src/compositor/compositor_api/compositor_api.pri index 3df061459..8dbe12ac1 100644 --- a/src/compositor/compositor_api/compositor_api.pri +++ b/src/compositor/compositor_api/compositor_api.pri @@ -17,6 +17,7 @@ HEADERS += \ compositor_api/qwaylandtouch.h \ compositor_api/qwaylandtouch_p.h \ compositor_api/qwaylandoutput.h \ + compositor_api/qwaylandoutput_p.h \ compositor_api/qwaylandoutputmode.h \ compositor_api/qwaylandoutputmode_p.h \ compositor_api/qwaylandbufferref.h \ diff --git a/src/compositor/compositor_api/qwaylandcompositor.cpp b/src/compositor/compositor_api/qwaylandcompositor.cpp index a0d69c52e..52ffb9166 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.cpp +++ b/src/compositor/compositor_api/qwaylandcompositor.cpp @@ -243,8 +243,10 @@ QWaylandCompositorPrivate::~QWaylandCompositorPrivate() delete data_device_manager; #endif +#if QT_CONFIG(opengl) // Some client buffer integrations need to clean up before the destroying the wl_display client_buffer_integration.reset(); +#endif wl_display_destroy(display); } diff --git a/src/compositor/compositor_api/qwaylandtouch.cpp b/src/compositor/compositor_api/qwaylandtouch.cpp index 3e7298001..15746cb5f 100644 --- a/src/compositor/compositor_api/qwaylandtouch.cpp +++ b/src/compositor/compositor_api/qwaylandtouch.cpp @@ -98,6 +98,20 @@ void QWaylandTouchPrivate::sendMotion(QWaylandClient *client, uint32_t time, int wl_fixed_from_double(position.x()), wl_fixed_from_double(position.y())); } +int QWaylandTouchPrivate::toSequentialWaylandId(int touchId) +{ + const int waylandId = ids.indexOf(touchId); + if (waylandId != -1) + return waylandId; + const int availableId = ids.indexOf(-1); + if (availableId != -1) { + ids[availableId] = touchId; + return availableId; + } + ids.append(touchId); + return ids.length() - 1; +} + /*! * \class QWaylandTouch * \inmodule QtWaylandCompositor @@ -212,7 +226,10 @@ void QWaylandTouch::sendFullTouchEvent(QWaylandSurface *surface, QTouchEvent *ev for (int i = 0; i < pointCount; ++i) { const QTouchEvent::TouchPoint &tp(points.at(i)); // Convert the local pos in the compositor window to surface-relative. - sendTouchPointEvent(surface, tp.id(), tp.pos(), tp.state()); + const int id = d->toSequentialWaylandId(tp.id()); + sendTouchPointEvent(surface, id, tp.pos(), tp.state()); + if (tp.state() == Qt::TouchPointReleased) + d->ids[id] = -1; } sendFrameEvent(surface->client()); } diff --git a/src/compositor/compositor_api/qwaylandtouch_p.h b/src/compositor/compositor_api/qwaylandtouch_p.h index de1b748de..0b87f8475 100644 --- a/src/compositor/compositor_api/qwaylandtouch_p.h +++ b/src/compositor/compositor_api/qwaylandtouch_p.h @@ -80,8 +80,10 @@ public: private: void touch_release(Resource *resource) override; + int toSequentialWaylandId(int touchId); QWaylandSeat *seat = nullptr; + QVarLengthArray<int, 10> ids; }; QT_END_NAMESPACE diff --git a/src/compositor/doc/src/qtwaylandcompositor-qmltypes.qdoc b/src/compositor/doc/src/qtwaylandcompositor-qmltypes.qdoc index 1dadb7102..454fc3711 100644 --- a/src/compositor/doc/src/qtwaylandcompositor-qmltypes.qdoc +++ b/src/compositor/doc/src/qtwaylandcompositor-qmltypes.qdoc @@ -26,7 +26,7 @@ ****************************************************************************/ /*! - \qmlmodule QtWayland.Compositor 1.1 + \qmlmodule QtWayland.Compositor 1.3 \title Qt Wayland Compositor QML Types \ingroup qmlmodules \brief Provides QML types for writing custom Wayland display servers. @@ -38,7 +38,7 @@ import statement: \code - import QtWayland.Compositor 1.1 + import QtWayland.Compositor 1.3 \endcode To link against the module, add this line to your \l qmake \c .pro file: diff --git a/src/compositor/extensions/qwaylandshell.cpp b/src/compositor/extensions/qwaylandshell.cpp index 12479186b..bb3b4675c 100644 --- a/src/compositor/extensions/qwaylandshell.cpp +++ b/src/compositor/extensions/qwaylandshell.cpp @@ -92,4 +92,24 @@ void QWaylandShell::setFocusPolicy(QWaylandShell::FocusPolicy focusPolicy) emit focusPolicyChanged(); } +QWaylandShell::QWaylandShell(QWaylandShellPrivate &dd) + : QWaylandCompositorExtension(dd) +{ +} + +QWaylandShell::QWaylandShell(QWaylandObject *container, QWaylandShellPrivate &dd) + : QWaylandCompositorExtension(container, dd) +{ +} + +QWaylandShell::QWaylandShell(QWaylandCompositorExtensionPrivate &dd) + : QWaylandShell(static_cast<QWaylandShellPrivate &>(dd)) +{ +} + +QWaylandShell::QWaylandShell(QWaylandObject *container, QWaylandCompositorExtensionPrivate &dd) + : QWaylandShell(container, static_cast<QWaylandShellPrivate &>(dd)) +{ +} + QT_END_NAMESPACE diff --git a/src/compositor/extensions/qwaylandshell.h b/src/compositor/extensions/qwaylandshell.h index a86938214..6f494be55 100644 --- a/src/compositor/extensions/qwaylandshell.h +++ b/src/compositor/extensions/qwaylandshell.h @@ -68,8 +68,12 @@ Q_SIGNALS: void focusPolicyChanged(); protected: - QWaylandShell(QWaylandCompositorExtensionPrivate &dd) : QWaylandCompositorExtension(dd) {} - QWaylandShell(QWaylandObject *container, QWaylandCompositorExtensionPrivate &dd) : QWaylandCompositorExtension(container, dd) {} + explicit QWaylandShell(QWaylandShellPrivate &dd); + explicit QWaylandShell(QWaylandObject *container, QWaylandShellPrivate &dd); + + //Qt 6: remove + Q_DECL_DEPRECATED QWaylandShell(QWaylandCompositorExtensionPrivate &dd); + Q_DECL_DEPRECATED QWaylandShell(QWaylandObject *container, QWaylandCompositorExtensionPrivate &dd); }; template <typename T> @@ -96,11 +100,11 @@ public: } protected: - QWaylandShellTemplate(QWaylandCompositorExtensionPrivate &dd) + QWaylandShellTemplate(QWaylandShellPrivate &dd) : QWaylandShell(dd) { } - QWaylandShellTemplate(QWaylandObject *container, QWaylandCompositorExtensionPrivate &dd) + QWaylandShellTemplate(QWaylandObject *container, QWaylandShellPrivate &dd) : QWaylandShell(container,dd) { } }; diff --git a/src/compositor/extensions/qwaylandwlshell_p.h b/src/compositor/extensions/qwaylandwlshell_p.h index e8d568fce..b2beca169 100644 --- a/src/compositor/extensions/qwaylandwlshell_p.h +++ b/src/compositor/extensions/qwaylandwlshell_p.h @@ -43,6 +43,7 @@ #include <QtWaylandCompositor/qtwaylandcompositorglobal.h> #include <QtWaylandCompositor/qwaylandsurface.h> #include <QtWaylandCompositor/private/qwaylandcompositorextension_p.h> +#include <QtWaylandCompositor/private/qwaylandshell_p.h> #include <QtWaylandCompositor/QWaylandWlShellSurface> #include <QtWaylandCompositor/QWaylandSeat> @@ -67,7 +68,7 @@ QT_BEGIN_NAMESPACE class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandWlShellPrivate - : public QWaylandCompositorExtensionPrivate + : public QWaylandShellPrivate , public QtWaylandServer::wl_shell { Q_DECLARE_PUBLIC(QWaylandWlShell) diff --git a/src/compositor/extensions/qwaylandxdgshell_p.h b/src/compositor/extensions/qwaylandxdgshell_p.h index 9d1140fbd..3223abf3a 100644 --- a/src/compositor/extensions/qwaylandxdgshell_p.h +++ b/src/compositor/extensions/qwaylandxdgshell_p.h @@ -38,6 +38,7 @@ #define QWAYLANDXDGSHELL_P_H #include <QtWaylandCompositor/private/qwaylandcompositorextension_p.h> +#include <QtWaylandCompositor/private/qwaylandshell_p.h> #include <QtWaylandCompositor/private/qwayland-server-xdg-shell.h> #include <QtWaylandCompositor/QWaylandXdgShell> @@ -73,7 +74,7 @@ struct Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgPositionerData { }; class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgShellPrivate - : public QWaylandCompositorExtensionPrivate + : public QWaylandShellPrivate , public QtWaylandServer::xdg_wm_base { Q_DECLARE_PUBLIC(QWaylandXdgShell) diff --git a/src/compositor/extensions/qwaylandxdgshellv5_p.h b/src/compositor/extensions/qwaylandxdgshellv5_p.h index 681c4537b..8f5af746b 100644 --- a/src/compositor/extensions/qwaylandxdgshellv5_p.h +++ b/src/compositor/extensions/qwaylandxdgshellv5_p.h @@ -41,6 +41,7 @@ #define QWAYLANDXDGSHELLV5_P_H #include <QtWaylandCompositor/private/qwaylandcompositorextension_p.h> +#include <QtWaylandCompositor/private/qwaylandshell_p.h> #include <QtWaylandCompositor/private/qwayland-server-xdg-shell-unstable-v5_p.h> #include <QtWaylandCompositor/QWaylandXdgShellV5> @@ -61,7 +62,7 @@ QT_BEGIN_NAMESPACE class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgShellV5Private - : public QWaylandCompositorExtensionPrivate + : public QWaylandShellPrivate , public QtWaylandServer::xdg_shell_v5 { Q_DECLARE_PUBLIC(QWaylandXdgShellV5) diff --git a/src/compositor/extensions/qwaylandxdgshellv6_p.h b/src/compositor/extensions/qwaylandxdgshellv6_p.h index adc25cb71..457bc2201 100644 --- a/src/compositor/extensions/qwaylandxdgshellv6_p.h +++ b/src/compositor/extensions/qwaylandxdgshellv6_p.h @@ -38,6 +38,7 @@ #define QWAYLANDXDGSHELLV6_P_H #include <QtWaylandCompositor/private/qwaylandcompositorextension_p.h> +#include <QtWaylandCompositor/private/qwaylandshell_p.h> #include <QtWaylandCompositor/private/qwayland-server-xdg-shell-unstable-v6.h> #include <QtWaylandCompositor/QWaylandXdgShellV6> @@ -71,7 +72,7 @@ struct Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgPositionerV6Data { }; class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgShellV6Private - : public QWaylandCompositorExtensionPrivate + : public QWaylandShellPrivate , public QtWaylandServer::zxdg_shell_v6 { Q_DECLARE_PUBLIC(QWaylandXdgShellV6) |