[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