From 942fd0dc8fb38bbd111ce913b3567a2711d691a0 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 9 Sep 2024 13:59:25 +1000 Subject: [PATCH] gestures: distinguish between a gesture reset and a gesture end/cancel All current states treat them the same way but let's distinguish those two so we can have different code depending on whether a gesture was cancelled/reset or ended properly. Part-of: --- src/evdev-mt-touchpad-gestures.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c index 8cb5aae5..5b656789 100644 --- a/src/evdev-mt-touchpad-gestures.c +++ b/src/evdev-mt-touchpad-gestures.c @@ -39,6 +39,8 @@ enum gesture_event { GESTURE_EVENT_RESET, + GESTURE_EVENT_END, + GESTURE_EVENT_CANCEL, GESTURE_EVENT_FINGER_DETECTED, GESTURE_EVENT_FINGER_SWITCH_TIMEOUT, GESTURE_EVENT_HOLD_TIMEOUT, @@ -79,6 +81,8 @@ gesture_event_to_str(enum gesture_event event) { switch(event) { CASE_RETURN_STRING(GESTURE_EVENT_RESET); + CASE_RETURN_STRING(GESTURE_EVENT_END); + CASE_RETURN_STRING(GESTURE_EVENT_CANCEL); CASE_RETURN_STRING(GESTURE_EVENT_FINGER_DETECTED); CASE_RETURN_STRING(GESTURE_EVENT_FINGER_SWITCH_TIMEOUT); CASE_RETURN_STRING(GESTURE_EVENT_HOLD_TIMEOUT); @@ -564,6 +568,8 @@ tp_gesture_handle_event_on_state_none(struct tp_dispatch *tp, { switch(event) { case GESTURE_EVENT_RESET: + case GESTURE_EVENT_END: + case GESTURE_EVENT_CANCEL: libinput_timer_cancel(&tp->gesture.hold_timer); break; case GESTURE_EVENT_FINGER_DETECTED: @@ -594,6 +600,8 @@ tp_gesture_handle_event_on_state_unknown(struct tp_dispatch *tp, { switch(event) { case GESTURE_EVENT_RESET: + case GESTURE_EVENT_END: + case GESTURE_EVENT_CANCEL: libinput_timer_cancel(&tp->gesture.hold_timer); tp->gesture.state = GESTURE_STATE_NONE; break; @@ -636,6 +644,8 @@ tp_gesture_handle_event_on_state_hold(struct tp_dispatch *tp, { switch(event) { case GESTURE_EVENT_RESET: + case GESTURE_EVENT_END: + case GESTURE_EVENT_CANCEL: libinput_timer_cancel(&tp->gesture.hold_timer); tp->gesture.state = GESTURE_STATE_NONE; break; @@ -677,6 +687,8 @@ tp_gesture_handle_event_on_state_hold_and_motion(struct tp_dispatch *tp, { switch(event) { case GESTURE_EVENT_RESET: + case GESTURE_EVENT_END: + case GESTURE_EVENT_CANCEL: libinput_timer_cancel(&tp->gesture.hold_timer); tp->gesture.state = GESTURE_STATE_NONE; break; @@ -709,6 +721,8 @@ tp_gesture_handle_event_on_state_pointer_motion(struct tp_dispatch *tp, switch(event) { case GESTURE_EVENT_RESET: + case GESTURE_EVENT_END: + case GESTURE_EVENT_CANCEL: libinput_timer_cancel(&tp->gesture.hold_timer); tp->gesture.state = GESTURE_STATE_NONE; break; @@ -744,6 +758,8 @@ tp_gesture_handle_event_on_state_scroll(struct tp_dispatch *tp, { switch(event) { case GESTURE_EVENT_RESET: + case GESTURE_EVENT_END: + case GESTURE_EVENT_CANCEL: libinput_timer_cancel(&tp->gesture.hold_timer); tp->gesture.state = GESTURE_STATE_NONE; break; @@ -773,6 +789,8 @@ tp_gesture_handle_event_on_state_pinch(struct tp_dispatch *tp, { switch(event) { case GESTURE_EVENT_RESET: + case GESTURE_EVENT_END: + case GESTURE_EVENT_CANCEL: libinput_timer_cancel(&tp->gesture.hold_timer); tp->gesture.state = GESTURE_STATE_NONE; break; @@ -798,6 +816,8 @@ tp_gesture_handle_event_on_state_swipe(struct tp_dispatch *tp, { switch(event) { case GESTURE_EVENT_RESET: + case GESTURE_EVENT_END: + case GESTURE_EVENT_CANCEL: libinput_timer_cancel(&tp->gesture.hold_timer); tp->gesture.state = GESTURE_STATE_NONE; break; @@ -1407,7 +1427,7 @@ tp_gesture_end(struct tp_dispatch *tp, uint64_t time, bool cancelled) } tp->gesture.started = false; - tp_gesture_handle_event(tp, GESTURE_EVENT_RESET, time); + tp_gesture_handle_event(tp, cancelled ? GESTURE_EVENT_CANCEL : GESTURE_EVENT_END, time); } void -- 2.34.1