[PATCH libinput 0/7] Handle jumping cursors

Peter Hutterer peter.hutterer at who-t.net
Wed Sep 17 21:20:16 PDT 2014


When a finger leaves the touchpad at the same time as another finger sets
down, a touchpad may not notice the change in fingers but rather think the
touchpoint moved to the new position. Bug 76722 has an event sequence but it
really boils down to just a move of a touch, identifiable only by the
distance moved.

https://bugs.freedesktop.org/show_bug.cgi?id=76722

I've done some measurements on a T440 and a x220 and the most one can
reasonably move on those two is under 20mm. Use the script at the url below
if you want to verify yourself.
https://github.com/whot/input-data-analysis/tree/master/touchpad-max-delta

The idea of the fix was to consider a jumping touch a changing touch, i.e.
end it and begin it at the new position. This also requires the new touch to
be tap-capable, recognised by the softbutton code, etc.

Handling this is a bit tricky because we handle the state of the touchpad at
EV_SYN time, so we can't easily split event handling. Since we don't know
which touchpoint moves (could be the second one, in theory) we'd have to do
double-processing of the state otherwise, i.e. pull all events up to the
EV_SYN, check each touchpoint for jumps, release those, process the state,
then re-process the events again. The approach I've picked here is to handle
the state twice (rather than the events), ignoring certain things the first
time and other things the second time.

Benjamin is currently looking into a (hopefully simpler) kernel fix so maybe
we won't need this patchset anyway, but I prefer it to be archived on the
list either way. All that aside, patches 1-3 are useful anyway.

All available on 
https://github.com/whot/libinput/tree/wip/jumping-cursor

Cheers,
  Peter



More information about the wayland-devel mailing list