Summary: | Hysteresis detection fails on the single-touch axes after a while | ||
---|---|---|---|
Product: | Wayland | Reporter: | Peter Hutterer <peter.hutterer> |
Component: | libinput | Assignee: | Wayland bug list <wayland-bugs> |
Status: | RESOLVED NOTOURBUG | QA Contact: | |
Severity: | normal | ||
Priority: | medium | CC: | benjamin.tissoires, jcowgill+freedesktop, nate, peter.hutterer |
Version: | unspecified | ||
Hardware: | Other | ||
OS: | All | ||
Whiteboard: | |||
i915 platform: | i915 features: | ||
Bug Depends on: | 98839 | ||
Bug Blocks: | |||
Attachments: |
evemu recording of a finger-hold
finger hold recording with comment #2 patch |
Description
Peter Hutterer
2018-01-08 02:39:18 UTC
I think 352ce2b0575f195c8e6452a9 is right, as we really do not want the events to be applied twice the fuzz. The bug is more likely in synaptics.c for semi-mt devices. Only these devices are not using input_mt_report_pointer_emulation(), so we should more likely set the fuzz to ABS_X/Y manually in set_input_params() when the branch SYN_CAP_ADV_GESTURE(info->ext_cap_0c) is selected. I think this diff should do it. Not ideal, but better than trying to rewrite all of the semi-mt event code without a device to test... James, please give this one a test, should show up a fuzz of 8 for ABS_X/Y now. diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index ee5466a374bf..0e04275e0d74 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c @@ -1280,6 +1280,14 @@ static void set_input_params(struct psmouse *psmouse, INPUT_MT_POINTER | (cr48_profile_sensor ? INPUT_MT_TRACK : INPUT_MT_SEMI_MT)); + + /* For semi-mt devices we send ABS_X/Y ourselves instead of + * input_mt_report_pointer_emulation. But + * input_mt_init_slots() resets the fuzz to 0, leading to a + * filtered ABS_MT_POSITION_X but an unfiltered ABS_X + * position. Let's re-initialize ABS_X/Y here. */ + if (!cr48_profile_sensor) + set_abs_position_params(dev, &priv->info, ABS_X, ABS_Y); } if (SYN_CAP_PALMDETECT(info->capabilities)) Created attachment 136669 [details] finger hold recording with comment #2 patch Thanks. With your patch applied on top of 4.15-rc7, the situation is much better than before. I do notice the mouse being slightly more wobbly than before libinput was changed, but that doesn't bother me too much. I've attached a new evemu recording with the patch applied. looks much better, the single touch and multitouch axis events are now in sync. The hysteresis is disabled now too and with the above recording I can see a few events get through but they're almost all in the subpixel range. event19 POINTER_MOTION +1.44s 0.00/ -1.68 event19 POINTER_MOTION +1.47s 0.00/ -0.33 event19 POINTER_MOTION +2.61s -0.13/ 0.00 event19 POINTER_MOTION +3.10s 0.00/ -0.12 event19 POINTER_MOTION +10.00s 0.00/ -0.12 event19 POINTER_MOTION +12.73s 0.00/ 0.12 event19 POINTER_MOTION +12.80s 0.11/ 0.00 If there's real pointer wobble we may have to adjust the fuzz factor, that seems to be something worth doing with an EV_ABS override. But meanwhile, I'm going to claim this is a kernel bug. https://patchwork.kernel.org/patch/10166045/ |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.