mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-05-08 16:00:06 +02:00
tap: handle palm detection releasing touches from palm state
This commit is contained in:
parent
b566d64c17
commit
7514a32733
1 changed files with 34 additions and 2 deletions
|
|
@ -1229,12 +1229,44 @@ tp_tap_handle_state(struct tp_dispatch *tp, uint64_t time)
|
|||
* ignore any event from it.
|
||||
*/
|
||||
if (t->tap.is_palm) {
|
||||
if (t->state == TOUCH_END)
|
||||
if (t->state == TOUCH_END) {
|
||||
tp_tap_handle_event(tp,
|
||||
t,
|
||||
TAP_EVENT_PALM_UP,
|
||||
time);
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
if (t->palm.state != PALM_NONE)
|
||||
continue;
|
||||
|
||||
/* Treat a touch previously classified as palm as a new
|
||||
* touch when it ceases to be a palm. Several palm
|
||||
* detection mechanisms such as PALM_EDGE or
|
||||
* PALM_TOOL_PALM can release palms like this. */
|
||||
tp_tap_handle_event(tp,
|
||||
t,
|
||||
TAP_EVENT_PALM_UP,
|
||||
time);
|
||||
t->tap.is_palm = false;
|
||||
tp->tap.nfingers_down++;
|
||||
tp_tap_handle_event(tp,
|
||||
t,
|
||||
TAP_EVENT_TOUCH,
|
||||
time);
|
||||
/* Since we're evidently not quite sure about the palm
|
||||
* state of this touch, disqualify it from tapping to be
|
||||
* safe. The initial coordinates and timestamp are also
|
||||
* lost at this point, so motion and timeout checks
|
||||
* couldn't be accurate anyway. */
|
||||
struct tp_touch *tmp;
|
||||
tp_for_each_touch(tp, tmp) {
|
||||
if (tmp->tap.state == TAP_TOUCH_STATE_TOUCH)
|
||||
tmp->tap.state = TAP_TOUCH_STATE_DEAD;
|
||||
}
|
||||
tp_tap_handle_event(tp,
|
||||
t,
|
||||
TAP_EVENT_MOTION,
|
||||
time);
|
||||
}
|
||||
|
||||
if (t->state == TOUCH_HOVERING)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue