mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-01-03 17:20:11 +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>
(cherry picked from commit d8db6b5927)
This commit is contained in:
parent
eeb967b650
commit
42e8813a63
1 changed files with 9 additions and 5 deletions
|
|
@ -345,22 +345,26 @@ 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 already in TOUCH_END\n");
|
||||
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