From bb2678bfe88eb3e64f211533d776d6c277e731a8 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 30 Apr 2015 14:48:42 +1000 Subject: [PATCH] touchpad: when clearing the touchpad state, release fake touches too Causes an error message in the device_disable_release_tap_n_drag test. When the touchpad is suspended, all touches are ended in tp_clear_state. Since the hovering support was added, this returns the touches to TOUCH_HOVERING, a subsequent tp_handle_state() will turn them back into TOUCH_BEGIN based on BTN_TOUCH and BTN_TOOL_FINGER still being down. Clear the fake touch buttons as well after ending the touches, this way the touch points are reset to TOUCH_NONE as intended. Once we do that we don't need to manually change the tap finger count when releasing taps, we can just let the count reset naturally. Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede --- src/evdev-mt-touchpad.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index d5ce8803..e017559d 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -749,6 +749,12 @@ tp_destroy(struct evdev_dispatch *dispatch) free(tp); } +static void +tp_release_fake_touches(struct tp_dispatch *tp) +{ + tp->fake_touches = 0; +} + static void tp_clear_state(struct tp_dispatch *tp) { @@ -772,6 +778,7 @@ tp_clear_state(struct tp_dispatch *tp) tp_for_each_touch(tp, t) { tp_end_sequence(tp, t, now); } + tp_release_fake_touches(tp); tp_handle_state(tp, now); }