Fix wayland touch event to use time stamp from wayland compositor

Touch events may be ignored if we set time stamp in handleTouchEvent()
when handling touch events queued in wayland socket in main thread.
So use time stamp from wayland compositor.

Task-number: QTBUG-100150
Pick-to: 6.2 6.3
Change-Id: I14fd3791b4d29177c71662d1cf26c0eed0abb767
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Seokha Ko <seokha.ko@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
This commit is contained in:
Seokha Ko 2022-01-24 15:48:58 +09:00 committed by Liang Qi
parent 199b82b5cf
commit 3047afe05f

View File

@ -1405,7 +1405,7 @@ void QWaylandInputDevice::Touch::touch_down(uint32_t serial,
void QWaylandInputDevice::Touch::touch_up(uint32_t serial, uint32_t time, int32_t id)
{
Q_UNUSED(serial);
Q_UNUSED(time);
mParent->mTime = time;
mParent->handleTouchPoint(id, QEventPoint::Released);
if (allTouchPointsReleased()) {
@ -1424,8 +1424,8 @@ void QWaylandInputDevice::Touch::touch_up(uint32_t serial, uint32_t time, int32_
void QWaylandInputDevice::Touch::touch_motion(uint32_t time, int32_t id, wl_fixed_t x, wl_fixed_t y)
{
Q_UNUSED(time);
QPointF position(wl_fixed_to_double(x), wl_fixed_to_double(y));
mParent->mTime = time;
mParent->handleTouchPoint(id, QEventPoint::Updated, position);
}
@ -1524,7 +1524,7 @@ void QWaylandInputDevice::Touch::touch_frame()
return;
}
QWindowSystemInterface::handleTouchEvent(window, mParent->mTouchDevice, mPendingTouchPoints, mParent->modifiers());
QWindowSystemInterface::handleTouchEvent(window, mParent->mTime, mParent->mTouchDevice, mPendingTouchPoints, mParent->modifiers());
// Prepare state for next frame
const auto prevTouchPoints = mPendingTouchPoints;