From: "Franklin S. Cooper Jr" <[email protected]> * Currently Qt 5 when using Wayland only properly recognizes one touchup, touchmove and touch down event. * Any further touch events are not properly recognized. * Apparently this is a bug in how Weston handles touch events. * Use a patch provided by Digia to work around this issue. * More testing is required to verify that this is a valid fix.
Qt Bug Report link: https://bugreports.qt-project.org/browse/QTBUG-36602 Signed-off-by: Franklin S. Cooper Jr <[email protected]> --- .../qt5/qtwayland/0001-Fix-touch-with-Weston.patch | 74 ++++++++++++++++++++ .../recipes-qt/qt5/qtwayland_git.bbappend | 7 +- 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 meta-arago-extras/recipes-qt/qt5/qtwayland/0001-Fix-touch-with-Weston.patch diff --git a/meta-arago-extras/recipes-qt/qt5/qtwayland/0001-Fix-touch-with-Weston.patch b/meta-arago-extras/recipes-qt/qt5/qtwayland/0001-Fix-touch-with-Weston.patch new file mode 100644 index 0000000..df564bb --- /dev/null +++ b/meta-arago-extras/recipes-qt/qt5/qtwayland/0001-Fix-touch-with-Weston.patch @@ -0,0 +1,74 @@ +From 797fd02ed6bb26f30899e117d6ab8119b7a24f95 Mon Sep 17 00:00:00 2001 +From: Laszlo Agocs <[email protected]> +Date: Fri, 29 Aug 2014 20:43:20 +0200 +Subject: [PATCH] Fix touch with Weston + +Work around the missing touch_frame after the last touch_up. + +Task-number: QTBUG-36602 +Change-Id: Iccb03bdc8b430c7cefc097c3c84e50be676c7fe7 +--- + src/client/qwaylandinputdevice.cpp | 26 +++++++++++++++++++------- + 1 file changed, 19 insertions(+), 7 deletions(-) + +diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp +index 6c13201..a520c79 100644 +--- a/src/client/qwaylandinputdevice.cpp ++++ b/src/client/qwaylandinputdevice.cpp +@@ -220,6 +220,8 @@ public: + void touch_frame() Q_DECL_OVERRIDE; + void touch_cancel() Q_DECL_OVERRIDE; + ++ bool allTouchPointsReleased(); ++ + QWaylandInputDevice *mParent; + QWaylandWindow *mFocus; + QList<QWindowSystemInterface::TouchPoint> mTouchPoints; +@@ -863,6 +865,13 @@ void QWaylandInputDevice::Touch::touch_up(uint32_t serial, uint32_t time, int32_ + Q_UNUSED(time); + mFocus = 0; + mParent->handleTouchPoint(id, 0, 0, Qt::TouchPointReleased); ++ ++ // As of Weston 1.5.90 there is no touch_frame after the last touch_up ++ // (i.e. when the last finger is released). To accomodate for this, issue a ++ // touch_frame. This cannot hurt since it is safe to call the touch_frame ++ // handler multiple times when there are no points left. ++ if (allTouchPointsReleased()) ++ touch_frame(); + } + + void QWaylandInputDevice::Touch::touch_motion(uint32_t time, int32_t id, wl_fixed_t x, wl_fixed_t y) +@@ -921,6 +930,15 @@ void QWaylandInputDevice::handleTouchPoint(int id, double x, double y, Qt::Touch + mTouch->mTouchPoints.append(tp); + } + ++bool QWaylandInputDevice::Touch::allTouchPointsReleased() ++{ ++ for (int i = 0; i < mTouchPoints.count(); ++i) ++ if (mTouchPoints.at(i).state != Qt::TouchPointReleased) ++ return false; ++ ++ return true; ++} ++ + void QWaylandInputDevice::Touch::touch_frame() + { + // Copy all points, that are in the previous but not in the current list, as stationary. +@@ -950,13 +968,7 @@ void QWaylandInputDevice::Touch::touch_frame() + + QWindowSystemInterface::handleTouchEvent(window, mParent->mTouchDevice, mTouchPoints); + +- bool allReleased = true; +- for (int i = 0; i < mTouchPoints.count(); ++i) +- if (mTouchPoints.at(i).state != Qt::TouchPointReleased) { +- allReleased = false; +- break; +- } +- ++ const bool allReleased = allTouchPointsReleased(); + mPrevTouchPoints = mTouchPoints; + mTouchPoints.clear(); + +-- +1.7.9.5 + diff --git a/meta-arago-extras/recipes-qt/qt5/qtwayland_git.bbappend b/meta-arago-extras/recipes-qt/qt5/qtwayland_git.bbappend index 64de589..dca1710 100644 --- a/meta-arago-extras/recipes-qt/qt5/qtwayland_git.bbappend +++ b/meta-arago-extras/recipes-qt/qt5/qtwayland_git.bbappend @@ -1,3 +1,8 @@ -PR_append = "-arago1" +PR_append = "-arago2" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI += "file://0001-Fix-touch-with-Weston.patch" + QT_MODULE_BRANCH = "5.4" -- 1.7.9.5 _______________________________________________ meta-arago mailing list [email protected] http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago
