macOS: Sanitize scroll deltas for NSEventPhaseCancelled
On macOS 12.1 the NSEventPhaseCancelled phase can in some situations report deltas, which causes the scroll to "jump". This happens for example when initiating a momentum-scroll, and then putting two fingers on the trackpad to cancel the momentum phase, which starts a new NSEventPhaseMayBegin phase. When then lifting the two fingers again, we get an NSEventPhaseCancelled event with deltas, but the deltas seem like uninitialized data (has a x-value, after doing a purely vertical scroll e.g.). Task-number: QTBUG-97841 Change-Id: I14e765b6111e53e7d3d0da219d4ac7fefe5243d0 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 2c3198ab5facdb5d36bd1513deeb15046fb61495) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
08d71101e2
commit
fca50c5985
@ -737,6 +737,16 @@ static const QPointingDevice *pointingDeviceFor(qint64 deviceID)
|
||||
Q_ASSERT(theEvent.momentumPhase != NSEventPhaseStationary);
|
||||
}
|
||||
|
||||
// Sanitize deltas for events that should not result in scrolling.
|
||||
// On macOS 12.1 this phase has been observed to report deltas.
|
||||
if (theEvent.phase == NSEventPhaseCancelled) {
|
||||
if (!pixelDelta.isNull() || !angleDelta.isNull()) {
|
||||
qCInfo(lcQpaMouse) << "Ignoring unexpected delta for" << theEvent;
|
||||
pixelDelta = QPoint();
|
||||
angleDelta = QPoint();
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent keyboard modifier state from changing during scroll event streams.
|
||||
// A two-finger trackpad flick generates a stream of scroll events. We want
|
||||
// the keyboard modifier state to be the state at the beginning of the
|
||||
|
Loading…
x
Reference in New Issue
Block a user