[PATCH libinput 06/14] evdev: move the relative deltas for normal devices to the fallback dispatch

Peter Hutterer peter.hutterer at who-t.net
Thu Jul 21 00:31:54 UTC 2016


Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 src/evdev.c | 36 ++++++++++++++++++++++--------------
 src/evdev.h |  4 ++--
 2 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/src/evdev.c b/src/evdev.c
index 140fa73..e68eab4 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -372,10 +372,10 @@ evdev_filter_defuzz_touch(struct evdev_device *device, struct mt_slot *slot)
 }
 
 static inline void
-evdev_rotate_relative(struct evdev_device *device)
+evdev_rotate_relative(struct evdev_dispatch *dispatch,
+		      struct evdev_device *device)
 {
-	struct evdev_dispatch *dispatch = device->dispatch;
-	struct device_coords rel = device->rel;
+	struct device_coords rel = dispatch->rel;
 
 	if (!device->base.config.rotation)
 		return;
@@ -384,7 +384,7 @@ evdev_rotate_relative(struct evdev_device *device)
 	 * right now anyway */
 	matrix_mult_vec(&dispatch->rotation.matrix, &rel.x, &rel.y);
 
-	device->rel = rel;
+	dispatch->rel = rel;
 }
 
 static void
@@ -412,13 +412,13 @@ evdev_flush_pending_event(struct evdev_device *device, uint64_t time)
 		if (!(device->seat_caps & EVDEV_DEVICE_POINTER))
 			break;
 
-		evdev_rotate_relative(device);
+		evdev_rotate_relative(dispatch, device);
 
-		normalize_delta(device, &device->rel, &unaccel);
-		raw.x = device->rel.x;
-		raw.y = device->rel.y;
-		device->rel.x = 0;
-		device->rel.y = 0;
+		normalize_delta(device, &dispatch->rel, &unaccel);
+		raw.x = dispatch->rel.x;
+		raw.y = dispatch->rel.y;
+		dispatch->rel.x = 0;
+		dispatch->rel.y = 0;
 
 		/* Use unaccelerated deltas for pointing stick scroll */
 		if (evdev_post_trackpoint_scroll(device, unaccel, time))
@@ -774,6 +774,7 @@ static inline void
 evdev_process_relative(struct evdev_device *device,
 		       struct input_event *e, uint64_t time)
 {
+	struct evdev_dispatch *dispatch = device->dispatch;
 	struct normalized_coords wheel_degrees = { 0.0, 0.0 };
 	struct discrete_coords discrete = { 0.0, 0.0 };
 
@@ -784,13 +785,13 @@ evdev_process_relative(struct evdev_device *device,
 	case REL_X:
 		if (device->pending_event != EVDEV_RELATIVE_MOTION)
 			evdev_flush_pending_event(device, time);
-		device->rel.x += e->value;
+		dispatch->rel.x += e->value;
 		device->pending_event = EVDEV_RELATIVE_MOTION;
 		break;
 	case REL_Y:
 		if (device->pending_event != EVDEV_RELATIVE_MOTION)
 			evdev_flush_pending_event(device, time);
-		device->rel.y += e->value;
+		dispatch->rel.y += e->value;
 		device->pending_event = EVDEV_RELATIVE_MOTION;
 		break;
 	case REL_WHEEL:
@@ -1481,6 +1482,14 @@ fallback_dispatch_init_slots(struct evdev_dispatch *dispatch,
 	return 0;
 }
 
+static inline void
+fallback_dispatch_init_rel(struct evdev_dispatch *dispatch,
+			   struct evdev_device *device)
+{
+	dispatch->rel.x = 0;
+	dispatch->rel.y = 0;
+}
+
 static struct evdev_dispatch *
 fallback_dispatch_create(struct libinput_device *device)
 {
@@ -1492,6 +1501,7 @@ fallback_dispatch_create(struct libinput_device *device)
 
 	dispatch->interface = &fallback_interface;
 
+	fallback_dispatch_init_rel(dispatch, evdev_device);
 	if (fallback_dispatch_init_slots(dispatch, evdev_device) == -1) {
 		free(dispatch);
 		return NULL;
@@ -2494,8 +2504,6 @@ evdev_device_create(struct libinput_seat *seat,
 	device->is_mt = 0;
 	device->mtdev = NULL;
 	device->udev_device = udev_device_ref(udev_device);
-	device->rel.x = 0;
-	device->rel.y = 0;
 	device->abs.seat_slot = -1;
 	device->dispatch = NULL;
 	device->fd = fd;
diff --git a/src/evdev.h b/src/evdev.h
index c2fad15..ff918b0 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -155,8 +155,6 @@ struct evdev_device {
 
 	struct mtdev *mtdev;
 
-	struct device_coords rel;
-
 	struct {
 		struct libinput_timer timer;
 		struct libinput_device_config_scroll_method config;
@@ -302,6 +300,8 @@ struct evdev_dispatch {
 		bool want_hysteresis;
 		struct device_coords hysteresis_margin;
 	} mt;
+
+	struct device_coords rel;
 };
 
 struct evdev_device *
-- 
2.7.4



More information about the wayland-devel mailing list