summaryrefslogtreecommitdiffstats
path: root/src/compositor
diff options
context:
space:
mode:
Diffstat (limited to 'src/compositor')
-rw-r--r--src/compositor/compositor_api/compositor_api.pri1
-rw-r--r--src/compositor/compositor_api/qwaylandcompositor.cpp2
-rw-r--r--src/compositor/compositor_api/qwaylandtouch.cpp19
-rw-r--r--src/compositor/compositor_api/qwaylandtouch_p.h2
-rw-r--r--src/compositor/doc/src/qtwaylandcompositor-qmltypes.qdoc4
-rw-r--r--src/compositor/extensions/qwaylandshell.cpp20
-rw-r--r--src/compositor/extensions/qwaylandshell.h12
-rw-r--r--src/compositor/extensions/qwaylandwlshell_p.h3
-rw-r--r--src/compositor/extensions/qwaylandxdgshell_p.h3
-rw-r--r--src/compositor/extensions/qwaylandxdgshellv5_p.h3
-rw-r--r--src/compositor/extensions/qwaylandxdgshellv6_p.h3
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)