projects
/
platform
/
upstream
/
libinput.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
evdev: hook up a generic enable/disable interface for devices
[platform/upstream/libinput.git]
/
src
/
evdev-mt-touchpad.c
diff --git
a/src/evdev-mt-touchpad.c
b/src/evdev-mt-touchpad.c
index
67828bd
..
d831b83
100644
(file)
--- a/
src/evdev-mt-touchpad.c
+++ b/
src/evdev-mt-touchpad.c
@@
-406,6
+406,11
@@
tp_process_state(struct tp_dispatch *tp, uint64_t time)
for (i = 0; i < tp->ntouches; i++) {
t = tp_get_touch(tp, i);
for (i = 0; i < tp->ntouches; i++) {
t = tp_get_touch(tp, i);
+
+ /* semi-mt finger postions may "jump" when nfingers changes */
+ if (tp->semi_mt && tp->nfingers_down != tp->old_nfingers_down)
+ tp_motion_history_reset(t);
+
if (i >= tp->real_touches && t->state != TOUCH_NONE) {
t->x = first->x;
t->y = first->y;
if (i >= tp->real_touches && t->state != TOUCH_NONE) {
t->x = first->x;
t->y = first->y;
@@
-454,6
+459,7
@@
tp_post_process_state(struct tp_dispatch *tp, uint64_t time)
t->dirty = false;
}
t->dirty = false;
}
+ tp->old_nfingers_down = tp->nfingers_down;
tp->buttons.old_state = tp->buttons.state;
tp->queued = TOUCHPAD_EVENT_NONE;
tp->buttons.old_state = tp->buttons.state;
tp->queued = TOUCHPAD_EVENT_NONE;
@@
-668,6
+674,8
@@
tp_init_slots(struct tp_dispatch *tp,
tp->has_mt = false;
}
tp->has_mt = false;
}
+ tp->semi_mt = libevdev_has_property(device->evdev, INPUT_PROP_SEMI_MT);
+
ARRAY_FOR_EACH(max_touches, m) {
if (libevdev_has_event_code(device->evdev,
EV_KEY,
ARRAY_FOR_EACH(max_touches, m) {
if (libevdev_has_event_code(device->evdev,
EV_KEY,
@@
-816,6
+824,8
@@
tp_init(struct tp_dispatch *tp,
if (tp_init_palmdetect(tp, device) != 0)
return -1;
if (tp_init_palmdetect(tp, device) != 0)
return -1;
+ device->seat_caps |= EVDEV_DEVICE_POINTER;
+
return 0;
}
return 0;
}