touchpad jumping in Xorg whenever a hold gesture is detected
Summary
After upgrading from libinput 1.16.4 to 1.19.1, I'm getting weird cursor jumps when using the touchpad. This is likely related to hold gestures and I bisected this to 1f548864.
Steps to reproduce
- start libinput-debug-events in two terminals, one with recent libinput and one with a pre-hold-gestures version
- hands off touchpad
- do a quick one-finger flick across the touchpad
Expected result (debug-events pre-hold-gestures):
event1 POINTER_MOTION +677.116s -2.57/ 6.41 (-11.00/+27.39)
event1 POINTER_MOTION +677.129s -5.15/ 10.22 (-22.00/+43.70)
event1 POINTER_MOTION +677.140s -5.15/ 12.97 (-22.00/+55.43)
event1 POINTER_MOTION +677.153s -4.21/ 12.66 (-18.00/+54.13)
event1 POINTER_MOTION +677.165s -2.81/ 11.59 (-12.00/+49.57)
event1 POINTER_MOTION +677.177s -2.11/ 9.46 ( -9.00/+40.43)
event1 POINTER_MOTION +677.188s -1.87/ 7.93 ( -8.00/+33.91)
event1 POINTER_MOTION +677.202s -0.70/ 6.41 ( -3.00/+27.39)
event1 POINTER_MOTION +677.212s -0.70/ 5.95 ( -3.00/+25.43)
event1 POINTER_MOTION +677.226s -0.47/ 2.90 ( -2.00/+12.39)
event1 POINTER_MOTION +677.531s 0.22/ -1.47 ( +1.00/ -6.52)
event1 POINTER_MOTION +677.543s 0.45/-10.70 ( +2.00/-47.61)
event1 POINTER_MOTION +677.554s 1.64/-14.96 ( +7.00/-63.91)
event1 POINTER_MOTION +677.566s 4.38/-26.56 (+17.00/-103.04)
event1 POINTER_MOTION +677.578s 4.17/-18.37 (+16.00/-70.43)
event1 POINTER_MOTION +677.591s 4.23/-13.33 (+18.00/-56.74)
event1 POINTER_MOTION +677.602s 4.45/-13.73 (+19.00/-58.70)
event1 POINTER_MOTION +677.615s 4.45/ -9.61 (+19.00/-41.09)
event1 POINTER_MOTION +677.627s 2.34/ -4.73 (+10.00/-20.22)
What happened instead (debug-events post-hold-gestures):
event1 POINTER_MOTION +679.647s -2.57/ 6.41 (-11.00/+27.39)
event1 POINTER_MOTION +679.660s -5.15/ 10.22 (-22.00/+43.70)
event1 POINTER_MOTION +679.671s -5.15/ 12.97 (-22.00/+55.43)
event1 POINTER_MOTION +679.684s -4.21/ 12.66 (-18.00/+54.13)
event1 POINTER_MOTION +679.696s -2.81/ 11.59 (-12.00/+49.57)
event1 POINTER_MOTION +679.708s -2.11/ 9.46 ( -9.00/+40.43)
event1 POINTER_MOTION +679.719s -1.87/ 7.93 ( -8.00/+33.91)
event1 POINTER_MOTION +679.733s -0.70/ 6.41 ( -3.00/+27.39)
event1 POINTER_MOTION +679.743s -0.70/ 5.95 ( -3.00/+25.43)
event1 POINTER_MOTION +679.757s -0.47/ 2.90 ( -2.00/+12.39)
event1 POINTER_MOTION +680.062s 0.22/ -1.47 ( +1.00/ -6.52)
event1 GESTURE_HOLD_BEGIN +680.064s 1
event1 POINTER_MOTION +680.074s 0.45/-10.70 ( +2.00/-47.61)
event1 GESTURE_HOLD_END +680.074s 1 cancelled
event1 POINTER_MOTION +680.074s 2.16/-51.35 ( +2.00/-47.61)
event1 POINTER_MOTION +680.085s 7.55/-68.95 ( +7.00/-63.91)
event1 POINTER_MOTION +680.097s 4.38/-26.56 (+17.00/-103.04)
event1 POINTER_MOTION +680.109s 4.17/-18.37 (+16.00/-70.43)
event1 POINTER_MOTION +680.122s 4.23/-13.33 (+18.00/-56.74)
event1 POINTER_MOTION +680.133s 4.45/-13.73 (+19.00/-58.70)
event1 POINTER_MOTION +680.146s 4.45/ -9.61 (+19.00/-41.09)
event1 POINTER_MOTION +680.158s 2.34/ -4.73 (+10.00/-20.22)
In particular, note:
Expected:
event1 POINTER_MOTION +677.543s 0.45/-10.70 ( +2.00/-47.61)
event1 POINTER_MOTION +677.554s 1.64/-14.96 ( +7.00/-63.91)
event1 POINTER_MOTION +677.566s 4.38/-26.56 (+17.00/-103.04)
Got:
event1 POINTER_MOTION +680.074s 0.45/-10.70 ( +2.00/-47.61)
event1 GESTURE_HOLD_END +680.074s 1 cancelled
event1 POINTER_MOTION +680.074s 2.16/-51.35 ( +2.00/-47.61)
event1 POINTER_MOTION +680.085s 7.55/-68.95 ( +7.00/-63.91)
event1 POINTER_MOTION +680.097s 4.38/-26.56 (+17.00/-103.04)
Required information
- libinput version: 1.19.1 (anything after 1f548864, really)
- hardware information: ThinkPad T25, should be more or less equivalent to T470
-
libinput record
output: record.txt -
libinput debug-events --verbose
output: debug-events.txt
There's no xf86-input-libinput 1.2.0 in Debian yet, but I didn't see any mention of hold gestures in the diff between 1.2.0 and 1.1.0, so I don't think these jump would've been filtered had I upgraded this.
I apply these xinput property overrides (would that be relevant when the bug is visible through debug-events, though?) in my ~/.xsession
:
xinput set-prop 'SynPS/2 Synaptics TouchPad' 'libinput Natural Scrolling Enabled' 1 || :
xinput set-prop 'SynPS/2 Synaptics TouchPad' 'libinput Accel Speed' 0.3 || :
xinput set-prop 'SynPS/2 Synaptics TouchPad' 'libinput Middle Emulation Enabled' 1 || :
xinput set-prop 'SynPS/2 Synaptics TouchPad' 'libinput Disable While Typing Enabled' 0 || :