[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