Hi,
On 29-11-16 04:48, Peter Hutterer wrote:
On Mon, Nov 28, 2016 at 03:33:25PM +0100, Hans de Goede wrote:
Hi,
On 27-11-16 23:55, Peter Hutterer wrote:
This touchpad has cursor jumps for 2-finger scrolling that also affects the
single-finger emulation. So disable any multitouch bits on this device and
disallow the 2-finger scroll method. This still allows for 2-finger
tapping/clicking.
https://bugs.freedesktop.org/show_bug.cgi?id=91135
Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
This sounds a lot like what we're doing for semi-mt devices,
but then with completely different code-paths. AFAICT we still
allow BTN_TOOL_DOUBLETAP, etc. for semi-mt, so why not use
the same method.
To be specific I'm talking about the "if (tp->semi_mt) { ... }"
block with the large comment above it in tp_init_slots(), to me
it sounds like you want to change that to:
if (tp->semi_mit ||
(tp->device->model_flags & EVDEV_MODEL_HP_PAVILION_DM4_TOUCHPAD)) {
...
}
Rather then come up with a second approach to only listen to the
non-mt coordinates.
right, with the semi-mt we do a similar-ish thing but we still allow
two-finger scrolling based on the single position + BTN_TOOL_DOUBLETAP. In
this case the touchpad data is garbage as soon as two fingers are down, even
the single-touch emulation is useless. So it's not quite the same category
as semi-mts which can still be ok for 2fg scrolling. And since it's garbage
anyway, we might as well disable all MT axes.
I see, so that would require keeping this hunk of your original patch:
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index d72cb19..beb19cd 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -1909,6 +1909,12 @@ tp_scroll_get_methods(struct tp_dispatch *tp)
{
uint32_t methods = LIBINPUT_CONFIG_SCROLL_EDGE;
+ /* Any movement with more than one finger has random cursor
+ * jumps. Don't allow for 2fg scrolling on this device, see
+ * fdo bug 91135 */
+ if (tp->device->model_flags & EVDEV_MODEL_HP_PAVILION_DM4_TOUCHPAD)
+ return LIBINPUT_CONFIG_SCROLL_EDGE;
+
if (tp->ntouches >= 2)
methods |= LIBINPUT_CONFIG_SCROLL_2FG;
But my above suggestion could still replace this hunk, which to me really
feels like doing the same as the semi-mt handling but then in a more
complicated way and having 2 code paths doing the same thing in a
different way feels wrong:
diff --git a/src/evdev.c b/src/evdev.c
index fac8fcb..eb4c0d0 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -2762,6 +2763,17 @@ evdev_pre_configure_model_quirks(struct evdev_device
*device)
if (device->model_flags & EVDEV_MODEL_HP_STREAM11_TOUCHPAD)
libevdev_enable_property(device->evdev,
INPUT_PROP_BUTTONPAD);
+
+ /* Touchpad has random jumps in slots, including for single-finger
+ * movement. See fdo bug 91135 */
+ if (device->model_flags & EVDEV_MODEL_HP_PAVILION_DM4_TOUCHPAD) {
+ unsigned int code;
+
+ for (code = ABS_MT_SLOT; code <= ABS_MT_TRACKING_ID; code++)
+ libevdev_disable_event_code(device->evdev,
+ EV_ABS,
+ code);
+ }
}
struct evdev_device *
Regards,
Hans
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel