diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2016-07-04 13:14:17 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2016-08-11 19:56:16 +1000 |
commit | 7e18ef291300551a231b32ccd1fd22aa5509ddd5 (patch) | |
tree | 703dc2f34b23e38dd9bb3bd6337c87ff740cc91c | |
parent | 4182e514030b81b1b99b640fe75bf96750c85090 (diff) |
evdev: move the relative deltas for normal devices to the fallback dispatch
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | src/evdev.c | 36 | ||||
-rw-r--r-- | src/evdev.h | 4 |
2 files changed, 24 insertions, 16 deletions
diff --git a/src/evdev.c b/src/evdev.c index 29afc3b..ea9791d 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 79193c9..d456959 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 * |