To avoid having a button left press and a button right release if the number
of fingers changes.

Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 src/evdev-mt-touchpad-buttons.c | 22 +++++++++++++---------
 src/evdev-mt-touchpad.h         |  1 +
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/evdev-mt-touchpad-buttons.c b/src/evdev-mt-touchpad-buttons.c
index 8946fc7..c3c97b0 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;
-       }
-
-       if (current)
+               }
+               tp->buttons.active = button;
                state = LIBINPUT_POINTER_BUTTON_STATE_PRESSED;
-       else
+       } else {
+               button = tp->buttons.active;
+               tp->buttons.active = 0;
                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 0879776..1dee663 100644
--- a/src/evdev-mt-touchpad.h
+++ b/src/evdev-mt-touchpad.h
@@ -138,6 +138,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 {
-- 
1.8.5.3

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to