mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-02-04 04:40:25 +01:00
touchpad: end hovering touches in maybe_end_touch
Otherwise a hovering touch stays around forever even after the finger has discontinued. This doesn't matter on slots, but for fake fingers the finger may suddenly end up being forced down/up as a result of the pressure changes on the real fingers. So when in maybe_end_touch, switch them back to NONE immediately - hovering touches do not need to trigger a TOUCH_END event. https://bugs.freedesktop.org/show_bug.cgi?id=105258 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
3b20f3d02b
commit
d8db6b5927
1 changed files with 9 additions and 5 deletions
|
|
@ -346,23 +346,27 @@ tp_maybe_end_touch(struct tp_dispatch *tp,
|
|||
switch (t->state) {
|
||||
case TOUCH_NONE:
|
||||
case TOUCH_MAYBE_END:
|
||||
case TOUCH_HOVERING:
|
||||
return;
|
||||
case TOUCH_END:
|
||||
evdev_log_bug_libinput(tp->device,
|
||||
"touch %d: already in TOUCH_END\n",
|
||||
t->index);
|
||||
return;
|
||||
case TOUCH_HOVERING:
|
||||
case TOUCH_BEGIN:
|
||||
case TOUCH_UPDATE:
|
||||
break;
|
||||
}
|
||||
|
||||
t->dirty = true;
|
||||
t->state = TOUCH_MAYBE_END;
|
||||
if (t->state != TOUCH_HOVERING) {
|
||||
assert(tp->nfingers_down >= 1);
|
||||
tp->nfingers_down--;
|
||||
t->state = TOUCH_MAYBE_END;
|
||||
} else {
|
||||
t->state = TOUCH_NONE;
|
||||
}
|
||||
|
||||
assert(tp->nfingers_down >= 1);
|
||||
tp->nfingers_down--;
|
||||
t->dirty = true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue