• Peter Hutterer's avatar
    touchpad: add a TOUCH_MAYBE_END state · 6ccd8e93
    Peter Hutterer authored
    This state is used by the pre-processing of the touch states to indicate that
    the touch point has ended and is changed to TOUCH_END as soon as that
    pre-processing is finished.
    
    Sometimes we have to resurrect a touch point that has physically or logically
    ended but needs to be kept around to keep the BTN_TOOL_* fake finger count
    happy. Particularly on Synaptics touchpads, where a BTN_TOOL_TRIPLETAP can
    cause a touch point to end (i.e. 1 touch down + TRIPLETAP) but that touch
    restarts in the next sequence. We had a quirk for this in place already, but
    if we end the touch and then re-instate it with tp_begin_touch(), we may lose
    some information about thumb/palm/etc. states that touch already had. As a
    result, the state machines can get confused and a touch that was previously
    ignored as thumb suddenly isn't one anymore and triggers assertions.
    
    The specific sequence in bug 10528 is:
    * touch T1 down
    * touch T2 down, detected as speed-based thumb, tap state machine ignores
      it
    * frame F: TRIPLETAP down, touch T2 up
    * frame F+1: touch T2 down in next frame, but without the thumb bit
    * frame F+n: touch T2 ends, tap state machine gets confused because
      that touch should not trigger a release
    
    https://bugs.freedesktop.org/show_bug.cgi?id=105258Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
    6ccd8e93
evdev-mt-touchpad-edge-scroll.c 12.9 KB