X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fevdev-mt-touchpad.c;h=d831b836bab0c85ae6022a2278451ad35e965e2c;hb=3e93d913bef339311976a927091674fb7f1f4987;hp=67828bda7e0d069aed43f9da62809e69a266b151;hpb=125e98a1f8909cafbb968ea0c2bd9b21349490bb;p=platform%2Fupstream%2Flibinput.git diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 67828bd..d831b83 100644 --- 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); + + /* 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; @@ -454,6 +459,7 @@ tp_post_process_state(struct tp_dispatch *tp, uint64_t time) t->dirty = false; } + tp->old_nfingers_down = tp->nfingers_down; 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->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, @@ -816,6 +824,8 @@ tp_init(struct tp_dispatch *tp, if (tp_init_palmdetect(tp, device) != 0) return -1; + device->seat_caps |= EVDEV_DEVICE_POINTER; + return 0; }