evdev-touchpad: Twiddle finger_state correctly
authorRob Bradford <rob@linux.intel.com>
Tue, 9 Oct 2012 17:44:29 +0000 (18:44 +0100)
committerJonas Ådahl <jadahl@gmail.com>
Sun, 10 Nov 2013 16:51:31 +0000 (17:51 +0100)
The original code always set the finger_state to the appropriate bitmask
irrespective of whether the event was a press or a release. It would also blat
all members of the bitmask rather than ORing in the new bit for the event.

Cc:Jonas Ådahl <jadahl@gmail.com>
Signed-off-by: Rob Bradford <rob@linux.intel.com>
src/evdev-touchpad.c

index e453f9d..4da37a5 100644 (file)
@@ -457,19 +457,19 @@ process_key(struct touchpad_dispatch *touchpad,
                touchpad->reset = 1;
                break;
        case BTN_TOOL_FINGER:
-               touchpad->finger_state =
-                       ~TOUCHPAD_FINGERS_ONE | e->value ?
-                       TOUCHPAD_FINGERS_ONE : 0;
+               touchpad->finger_state &= ~TOUCHPAD_FINGERS_ONE;
+               if (e->value)
+                       touchpad->finger_state |= TOUCHPAD_FINGERS_ONE;
                break;
        case BTN_TOOL_DOUBLETAP:
-               touchpad->finger_state =
-                       ~TOUCHPAD_FINGERS_TWO | e->value ?
-                       TOUCHPAD_FINGERS_TWO : 0;
+               touchpad->finger_state &= ~TOUCHPAD_FINGERS_TWO;
+               if (e->value)
+                       touchpad->finger_state |= TOUCHPAD_FINGERS_TWO;
                break;
        case BTN_TOOL_TRIPLETAP:
-               touchpad->finger_state =
-                       ~TOUCHPAD_FINGERS_THREE | e->value ?
-                       TOUCHPAD_FINGERS_THREE : 0;
+               touchpad->finger_state &= ~TOUCHPAD_FINGERS_THREE;
+               if (e->value)
+                       touchpad->finger_state |= TOUCHPAD_FINGERS_THREE;
                break;
        }
 }