[PATCH libinput 07/14] evdev: move pending_event to the evdev_dispatch struct

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


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

diff --git a/src/evdev.c b/src/evdev.c
index e68eab4..620c6b7 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -405,7 +405,7 @@ evdev_flush_pending_event(struct evdev_device *device, uint64_t time)
 	if (dispatch->mt.slots)
 		slot = &dispatch->mt.slots[slot_idx];
 
-	switch (device->pending_event) {
+	switch (dispatch->pending_event) {
 	case EVDEV_NONE:
 		return;
 	case EVDEV_RELATIVE_MOTION:
@@ -559,7 +559,7 @@ evdev_flush_pending_event(struct evdev_device *device, uint64_t time)
 		break;
 	}
 
-	device->pending_event = EVDEV_NONE;
+	dispatch->pending_event = EVDEV_NONE;
 }
 
 static enum evdev_key_type
@@ -601,11 +601,13 @@ static void
 evdev_process_touch_button(struct evdev_device *device,
 			   uint64_t time, int value)
 {
-	if (device->pending_event != EVDEV_NONE &&
-	    device->pending_event != EVDEV_ABSOLUTE_MOTION)
+	struct evdev_dispatch *dispatch = device->dispatch;
+
+	if (dispatch->pending_event != EVDEV_NONE &&
+	    dispatch->pending_event != EVDEV_ABSOLUTE_MOTION)
 		evdev_flush_pending_event(device, time);
 
-	device->pending_event = (value ?
+	dispatch->pending_event = (value ?
 				 EVDEV_ABSOLUTE_TOUCH_DOWN :
 				 EVDEV_ABSOLUTE_TOUCH_UP);
 }
@@ -688,23 +690,23 @@ evdev_process_touch(struct evdev_device *device,
 		dispatch->mt.slot = e->value;
 		break;
 	case ABS_MT_TRACKING_ID:
-		if (device->pending_event != EVDEV_NONE &&
-		    device->pending_event != EVDEV_ABSOLUTE_MT_MOTION)
+		if (dispatch->pending_event != EVDEV_NONE &&
+		    dispatch->pending_event != EVDEV_ABSOLUTE_MT_MOTION)
 			evdev_flush_pending_event(device, time);
 		if (e->value >= 0)
-			device->pending_event = EVDEV_ABSOLUTE_MT_DOWN;
+			dispatch->pending_event = EVDEV_ABSOLUTE_MT_DOWN;
 		else
-			device->pending_event = EVDEV_ABSOLUTE_MT_UP;
+			dispatch->pending_event = EVDEV_ABSOLUTE_MT_UP;
 		break;
 	case ABS_MT_POSITION_X:
 		dispatch->mt.slots[dispatch->mt.slot].point.x = e->value;
-		if (device->pending_event == EVDEV_NONE)
-			device->pending_event = EVDEV_ABSOLUTE_MT_MOTION;
+		if (dispatch->pending_event == EVDEV_NONE)
+			dispatch->pending_event = EVDEV_ABSOLUTE_MT_MOTION;
 		break;
 	case ABS_MT_POSITION_Y:
 		dispatch->mt.slots[dispatch->mt.slot].point.y = e->value;
-		if (device->pending_event == EVDEV_NONE)
-			device->pending_event = EVDEV_ABSOLUTE_MT_MOTION;
+		if (dispatch->pending_event == EVDEV_NONE)
+			dispatch->pending_event = EVDEV_ABSOLUTE_MT_MOTION;
 		break;
 	}
 }
@@ -713,16 +715,18 @@ static inline void
 evdev_process_absolute_motion(struct evdev_device *device,
 			      struct input_event *e)
 {
+	struct evdev_dispatch *dispatch = device->dispatch;
+
 	switch (e->code) {
 	case ABS_X:
 		device->abs.point.x = e->value;
-		if (device->pending_event == EVDEV_NONE)
-			device->pending_event = EVDEV_ABSOLUTE_MOTION;
+		if (dispatch->pending_event == EVDEV_NONE)
+			dispatch->pending_event = EVDEV_ABSOLUTE_MOTION;
 		break;
 	case ABS_Y:
 		device->abs.point.y = e->value;
-		if (device->pending_event == EVDEV_NONE)
-			device->pending_event = EVDEV_ABSOLUTE_MOTION;
+		if (dispatch->pending_event == EVDEV_NONE)
+			dispatch->pending_event = EVDEV_ABSOLUTE_MOTION;
 		break;
 	}
 }
@@ -783,16 +787,16 @@ evdev_process_relative(struct evdev_device *device,
 
 	switch (e->code) {
 	case REL_X:
-		if (device->pending_event != EVDEV_RELATIVE_MOTION)
+		if (dispatch->pending_event != EVDEV_RELATIVE_MOTION)
 			evdev_flush_pending_event(device, time);
 		dispatch->rel.x += e->value;
-		device->pending_event = EVDEV_RELATIVE_MOTION;
+		dispatch->pending_event = EVDEV_RELATIVE_MOTION;
 		break;
 	case REL_Y:
-		if (device->pending_event != EVDEV_RELATIVE_MOTION)
+		if (dispatch->pending_event != EVDEV_RELATIVE_MOTION)
 			evdev_flush_pending_event(device, time);
 		dispatch->rel.y += e->value;
-		device->pending_event = EVDEV_RELATIVE_MOTION;
+		dispatch->pending_event = EVDEV_RELATIVE_MOTION;
 		break;
 	case REL_WHEEL:
 		evdev_flush_pending_event(device, time);
@@ -850,10 +854,12 @@ evdev_any_button_down(struct evdev_device *device)
 static inline bool
 evdev_need_touch_frame(struct evdev_device *device)
 {
+	struct evdev_dispatch *dispatch = device->dispatch;
+
 	if (!(device->seat_caps & EVDEV_DEVICE_TOUCH))
 		return false;
 
-	switch (device->pending_event) {
+	switch (dispatch->pending_event) {
 	case EVDEV_NONE:
 	case EVDEV_RELATIVE_MOTION:
 		break;
@@ -1500,6 +1506,7 @@ fallback_dispatch_create(struct libinput_device *device)
 		return NULL;
 
 	dispatch->interface = &fallback_interface;
+	dispatch->pending_event = EVDEV_NONE;
 
 	fallback_dispatch_init_rel(dispatch, evdev_device);
 	if (fallback_dispatch_init_slots(dispatch, evdev_device) == -1) {
@@ -2507,7 +2514,6 @@ evdev_device_create(struct libinput_seat *seat,
 	device->abs.seat_slot = -1;
 	device->dispatch = NULL;
 	device->fd = fd;
-	device->pending_event = EVDEV_NONE;
 	device->devname = libevdev_get_name(device->evdev);
 	device->scroll.threshold = 5.0; /* Default may be overridden */
 	device->scroll.direction_lock_threshold = 5.0; /* Default may be overridden */
diff --git a/src/evdev.h b/src/evdev.h
index ff918b0..3078384 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -185,7 +185,6 @@ struct evdev_device {
 		int wheel_click_angle;
 	} scroll;
 
-	enum evdev_event_type pending_event;
 	enum evdev_device_seat_capability seat_caps;
 	enum evdev_device_tags tags;
 
@@ -302,6 +301,8 @@ struct evdev_dispatch {
 	} mt;
 
 	struct device_coords rel;
+
+	enum evdev_event_type pending_event;
 };
 
 struct evdev_device *
-- 
2.7.4



More information about the wayland-devel mailing list