[PATCH weston 5/8] evdev-touchpad: Implement two finger scroll
Jonas Ådahl
jadahl at gmail.com
Thu Sep 27 09:40:43 PDT 2012
Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
---
src/evdev-touchpad.c | 41 +++++++++++++++++++++++++++++------------
1 file changed, 29 insertions(+), 12 deletions(-)
diff --git a/src/evdev-touchpad.c b/src/evdev-touchpad.c
index 3ba8f80..7063a0d 100644
--- a/src/evdev-touchpad.c
+++ b/src/evdev-touchpad.c
@@ -477,9 +477,23 @@ touchpad_update_state(struct touchpad_dispatch *touchpad, uint32_t time)
filter_motion(touchpad, &dx, &dy, time);
- touchpad->device->rel.dx = wl_fixed_from_double(dx);
- touchpad->device->rel.dy = wl_fixed_from_double(dy);
- touchpad->device->pending_events |= EVDEV_RELATIVE_MOTION;
+ if (touchpad->finger_state == TOUCHPAD_FINGERS_ONE) {
+ touchpad->device->rel.dx = wl_fixed_from_double(dx);
+ touchpad->device->rel.dy = wl_fixed_from_double(dy);
+ touchpad->device->pending_events |=
+ EVDEV_RELATIVE_MOTION;
+ } else if (touchpad->finger_state == TOUCHPAD_FINGERS_TWO) {
+ if (dx != 0.0)
+ notify_axis(touchpad->device->seat,
+ time,
+ WL_POINTER_AXIS_HORIZONTAL_SCROLL,
+ wl_fixed_from_double(dx));
+ if (dy != 0.0)
+ notify_axis(touchpad->device->seat,
+ time,
+ WL_POINTER_AXIS_VERTICAL_SCROLL,
+ wl_fixed_from_double(dy));
+ }
}
if (!(touchpad->state & TOUCHPAD_STATE_MOVE) &&
@@ -579,19 +593,22 @@ 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;
+ if (e->value)
+ touchpad->finger_state |= TOUCHPAD_FINGERS_ONE;
+ else
+ touchpad->finger_state &= ~TOUCHPAD_FINGERS_ONE;
break;
case BTN_TOOL_DOUBLETAP:
- touchpad->finger_state =
- ~TOUCHPAD_FINGERS_TWO | e->value ?
- TOUCHPAD_FINGERS_TWO : 0;
+ if (e->value)
+ touchpad->finger_state |= TOUCHPAD_FINGERS_TWO;
+ else
+ touchpad->finger_state &= ~TOUCHPAD_FINGERS_TWO;
break;
case BTN_TOOL_TRIPLETAP:
- touchpad->finger_state =
- ~TOUCHPAD_FINGERS_THREE | e->value ?
- TOUCHPAD_FINGERS_THREE : 0;
+ if (e->value)
+ touchpad->finger_state |= TOUCHPAD_FINGERS_THREE;
+ else
+ touchpad->finger_state &= ~TOUCHPAD_FINGERS_THREE;
break;
}
}
--
1.7.9.5
More information about the wayland-devel
mailing list