mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-27 11:30:06 +01:00
gestures: push tp_gesture_end() into the actual state machine
Part-of: <https://gitlab.freedesktop.org/libinput/libinput/-/merge_requests/1049>
This commit is contained in:
parent
c1690d408a
commit
fd0875029b
1 changed files with 25 additions and 37 deletions
|
|
@ -647,10 +647,14 @@ tp_gesture_handle_event_on_state_hold(struct tp_dispatch *tp,
|
|||
log_gesture_bug(tp, event);
|
||||
break;
|
||||
case GESTURE_EVENT_END:
|
||||
case GESTURE_EVENT_CANCEL:
|
||||
case GESTURE_EVENT_CANCEL: {
|
||||
bool cancelled = event == GESTURE_EVENT_CANCEL;
|
||||
gesture_notify_hold_end(&tp->device->base, time,
|
||||
tp->gesture.finger_count, cancelled);
|
||||
libinput_timer_cancel(&tp->gesture.hold_timer);
|
||||
tp->gesture.state = GESTURE_STATE_NONE;
|
||||
break;
|
||||
}
|
||||
case GESTURE_EVENT_FINGER_SWITCH_TIMEOUT:
|
||||
tp_gesture_cancel(tp, time);
|
||||
break;
|
||||
|
|
@ -692,10 +696,14 @@ tp_gesture_handle_event_on_state_hold_and_motion(struct tp_dispatch *tp,
|
|||
log_gesture_bug(tp, event);
|
||||
break;
|
||||
case GESTURE_EVENT_END:
|
||||
case GESTURE_EVENT_CANCEL:
|
||||
case GESTURE_EVENT_CANCEL: {
|
||||
bool cancelled = event == GESTURE_EVENT_CANCEL;
|
||||
gesture_notify_hold_end(&tp->device->base, time,
|
||||
tp->gesture.finger_count, cancelled);
|
||||
libinput_timer_cancel(&tp->gesture.hold_timer);
|
||||
tp->gesture.state = GESTURE_STATE_NONE;
|
||||
break;
|
||||
}
|
||||
case GESTURE_EVENT_FINGER_SWITCH_TIMEOUT:
|
||||
tp_gesture_cancel(tp, time);
|
||||
break;
|
||||
|
|
@ -764,6 +772,7 @@ tp_gesture_handle_event_on_state_scroll(struct tp_dispatch *tp,
|
|||
case GESTURE_EVENT_RESET:
|
||||
case GESTURE_EVENT_END:
|
||||
case GESTURE_EVENT_CANCEL:
|
||||
tp_gesture_stop_twofinger_scroll(tp, time);
|
||||
libinput_timer_cancel(&tp->gesture.hold_timer);
|
||||
tp->gesture.state = GESTURE_STATE_NONE;
|
||||
break;
|
||||
|
|
@ -796,10 +805,16 @@ tp_gesture_handle_event_on_state_pinch(struct tp_dispatch *tp,
|
|||
log_gesture_bug(tp, event);
|
||||
break;
|
||||
case GESTURE_EVENT_END:
|
||||
case GESTURE_EVENT_CANCEL:
|
||||
case GESTURE_EVENT_CANCEL: {
|
||||
bool cancelled = event == GESTURE_EVENT_CANCEL;
|
||||
gesture_notify_pinch_end(&tp->device->base, time,
|
||||
tp->gesture.finger_count,
|
||||
tp->gesture.prev_scale,
|
||||
cancelled);
|
||||
libinput_timer_cancel(&tp->gesture.hold_timer);
|
||||
tp->gesture.state = GESTURE_STATE_NONE;
|
||||
break;
|
||||
}
|
||||
case GESTURE_EVENT_FINGER_SWITCH_TIMEOUT:
|
||||
tp_gesture_cancel(tp, time);
|
||||
break;
|
||||
|
|
@ -825,10 +840,16 @@ tp_gesture_handle_event_on_state_swipe(struct tp_dispatch *tp,
|
|||
log_gesture_bug(tp, event);
|
||||
break;
|
||||
case GESTURE_EVENT_END:
|
||||
case GESTURE_EVENT_CANCEL:
|
||||
case GESTURE_EVENT_CANCEL: {
|
||||
bool cancelled = event == GESTURE_EVENT_CANCEL;
|
||||
gesture_notify_swipe_end(&tp->device->base,
|
||||
time,
|
||||
tp->gesture.finger_count,
|
||||
cancelled);
|
||||
libinput_timer_cancel(&tp->gesture.hold_timer);
|
||||
tp->gesture.state = GESTURE_STATE_NONE;
|
||||
break;
|
||||
}
|
||||
case GESTURE_EVENT_FINGER_SWITCH_TIMEOUT:
|
||||
tp_gesture_cancel(tp, time);
|
||||
break;
|
||||
|
|
@ -1396,44 +1417,11 @@ tp_gesture_stop_twofinger_scroll(struct tp_dispatch *tp, uint64_t time)
|
|||
static void
|
||||
tp_gesture_end(struct tp_dispatch *tp, uint64_t time, bool cancelled)
|
||||
{
|
||||
enum tp_gesture_state state = tp->gesture.state;
|
||||
|
||||
if (!tp->gesture.started) {
|
||||
tp_gesture_handle_event(tp, GESTURE_EVENT_RESET, time);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (state) {
|
||||
case GESTURE_STATE_NONE:
|
||||
case GESTURE_STATE_UNKNOWN:
|
||||
evdev_log_bug_libinput(tp->device,
|
||||
"%s in unknown gesture mode\n",
|
||||
__func__);
|
||||
break;
|
||||
case GESTURE_STATE_HOLD:
|
||||
case GESTURE_STATE_HOLD_AND_MOTION:
|
||||
gesture_notify_hold_end(&tp->device->base, time,
|
||||
tp->gesture.finger_count, cancelled);
|
||||
break;
|
||||
case GESTURE_STATE_SCROLL:
|
||||
tp_gesture_stop_twofinger_scroll(tp, time);
|
||||
break;
|
||||
case GESTURE_STATE_PINCH:
|
||||
gesture_notify_pinch_end(&tp->device->base, time,
|
||||
tp->gesture.finger_count,
|
||||
tp->gesture.prev_scale,
|
||||
cancelled);
|
||||
break;
|
||||
case GESTURE_STATE_SWIPE:
|
||||
gesture_notify_swipe_end(&tp->device->base,
|
||||
time,
|
||||
tp->gesture.finger_count,
|
||||
cancelled);
|
||||
break;
|
||||
case GESTURE_STATE_POINTER_MOTION:
|
||||
break;
|
||||
}
|
||||
|
||||
tp->gesture.started = false;
|
||||
tp_gesture_handle_event(tp, cancelled ? GESTURE_EVENT_CANCEL : GESTURE_EVENT_END, time);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue