summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Klokkhammer Helsing <johan.helsing@qt.io>2019-11-04 14:21:18 +0100
committerJohan Klokkhammer Helsing <johan.helsing@qt.io>2019-11-05 13:19:01 +0100
commit57c28f461a066c03ef8ae3f823c040fa91876fb8 (patch)
tree56b3c4aef313c2859c63713fbfaab79a8c0ecee5
parent09474cdf5244ce6fba51a6b01bfe50caf7635c66 (diff)
Fix touch being ignored when down and motion are in the same frame
The Wayland protocol gives no guarantees about which events are part of a frame, so handle the case where we receive wl_touch.down and wl_touch.motion within the same frame. Fixes: QTBUG-79744 Change-Id: I5dd9302576d81da38e003c8e7e74da6a98def603 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
-rw-r--r--src/client/qwaylandinputdevice.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index 8f3df8e4d..193ce714b 100644
--- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp
@@ -1062,7 +1062,10 @@ void QWaylandInputDevice::handleTouchPoint(int id, Qt::TouchPointState state, co
tp.area.moveCenter(globalPosition);
}
- tp.state = state;
+ // If the touch point was pressed earlier this frame, we don't want to overwrite its state.
+ if (tp.state != Qt::TouchPointPressed)
+ tp.state = state;
+
tp.pressure = tp.state == Qt::TouchPointReleased ? 0 : 1;
}