From 2f9607a4893b3ee7d98a9a8f8dac9971529a0d95 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 27 Mar 2014 15:51:12 +1000 Subject: [PATCH] touchpad: save the active clickfinger button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To avoid having a button left press and a button right release if the number of fingers changes. Signed-off-by: Peter Hutterer Signed-off-by: Hans de Goede Reviewed-by: Jonas Ã…dahl Reviewed-by: Hans de Goede --- src/evdev-mt-touchpad-buttons.c | 24 ++++++++++++++---------- src/evdev-mt-touchpad.h | 1 + 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/evdev-mt-touchpad-buttons.c b/src/evdev-mt-touchpad-buttons.c index 640c699d..21241de7 100644 --- a/src/evdev-mt-touchpad-buttons.c +++ b/src/evdev-mt-touchpad-buttons.c @@ -75,23 +75,27 @@ tp_post_clickfinger_buttons(struct tp_dispatch *tp, uint32_t time) if (current == old) return 0; - switch (tp->nfingers_down) { + if (current) { + switch (tp->nfingers_down) { case 1: button = BTN_LEFT; break; case 2: button = BTN_RIGHT; break; case 3: button = BTN_MIDDLE; break; default: return 0; + } + tp->buttons.active = button; + state = LIBINPUT_POINTER_BUTTON_STATE_PRESSED; + } else { + button = tp->buttons.active; + tp->buttons.active = 0; + state = LIBINPUT_POINTER_BUTTON_STATE_RELEASED; } - if (current) - state = LIBINPUT_POINTER_BUTTON_STATE_PRESSED; - else - state = LIBINPUT_POINTER_BUTTON_STATE_RELEASED; - - pointer_notify_button(&tp->device->base, - time, - button, - state); + if (button) + pointer_notify_button(&tp->device->base, + time, + button, + state); return 1; } diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h index d84c9e8e..85cf7e54 100644 --- a/src/evdev-mt-touchpad.h +++ b/src/evdev-mt-touchpad.h @@ -132,6 +132,7 @@ struct tp_dispatch { uint32_t state; uint32_t old_state; uint32_t motion_dist; /* for pinned touches */ + unsigned int active; /* currently active button, for release event */ } buttons; /* physical buttons */ struct {