diff options
Diffstat (limited to 'src/evdev-mt-touchpad-buttons.c')
-rw-r--r-- | src/evdev-mt-touchpad-buttons.c | 105 |
1 files changed, 61 insertions, 44 deletions
diff --git a/src/evdev-mt-touchpad-buttons.c b/src/evdev-mt-touchpad-buttons.c index 6ce35218..a6373a93 100644 --- a/src/evdev-mt-touchpad-buttons.c +++ b/src/evdev-mt-touchpad-buttons.c @@ -143,17 +143,21 @@ is_inside_top_middle_area(const struct tp_dispatch *tp, } static void -tp_button_set_enter_timer(struct tp_dispatch *tp, struct tp_touch *t) +tp_button_set_enter_timer(struct tp_dispatch *tp, + struct tp_touch *t, + uint64_t time) { libinput_timer_set(&t->button.timer, - t->time + DEFAULT_BUTTON_ENTER_TIMEOUT); + time + DEFAULT_BUTTON_ENTER_TIMEOUT); } static void -tp_button_set_leave_timer(struct tp_dispatch *tp, struct tp_touch *t) +tp_button_set_leave_timer(struct tp_dispatch *tp, + struct tp_touch *t, + uint64_t time) { libinput_timer_set(&t->button.timer, - t->time + DEFAULT_BUTTON_LEAVE_TIMEOUT); + time + DEFAULT_BUTTON_LEAVE_TIMEOUT); } /* @@ -164,7 +168,8 @@ static void tp_button_set_state(struct tp_dispatch *tp, struct tp_touch *t, enum button_state new_state, - enum button_event event) + enum button_event event, + uint64_t time) { libinput_timer_cancel(&t->button.timer); @@ -184,10 +189,10 @@ tp_button_set_state(struct tp_dispatch *tp, break; case BUTTON_STATE_TOP_NEW: t->button.current = event; - tp_button_set_enter_timer(tp, t); + tp_button_set_enter_timer(tp, t, time); break; case BUTTON_STATE_TOP_TO_IGNORE: - tp_button_set_leave_timer(tp, t); + tp_button_set_leave_timer(tp, t, time); break; case BUTTON_STATE_IGNORE: t->button.current = 0; @@ -198,24 +203,25 @@ tp_button_set_state(struct tp_dispatch *tp, static void tp_button_none_handle_event(struct tp_dispatch *tp, struct tp_touch *t, - enum button_event event) + enum button_event event, + uint64_t time) { switch (event) { case BUTTON_EVENT_IN_BOTTOM_R: case BUTTON_EVENT_IN_BOTTOM_M: case BUTTON_EVENT_IN_BOTTOM_L: - tp_button_set_state(tp, t, BUTTON_STATE_BOTTOM, event); + tp_button_set_state(tp, t, BUTTON_STATE_BOTTOM, event, time); break; case BUTTON_EVENT_IN_TOP_R: case BUTTON_EVENT_IN_TOP_M: case BUTTON_EVENT_IN_TOP_L: - tp_button_set_state(tp, t, BUTTON_STATE_TOP_NEW, event); + tp_button_set_state(tp, t, BUTTON_STATE_TOP_NEW, event, time); break; case BUTTON_EVENT_IN_AREA: - tp_button_set_state(tp, t, BUTTON_STATE_AREA, event); + tp_button_set_state(tp, t, BUTTON_STATE_AREA, event, time); break; case BUTTON_EVENT_UP: - tp_button_set_state(tp, t, BUTTON_STATE_NONE, event); + tp_button_set_state(tp, t, BUTTON_STATE_NONE, event, time); break; case BUTTON_EVENT_PRESS: case BUTTON_EVENT_RELEASE: @@ -227,7 +233,8 @@ tp_button_none_handle_event(struct tp_dispatch *tp, static void tp_button_area_handle_event(struct tp_dispatch *tp, struct tp_touch *t, - enum button_event event) + enum button_event event, + uint64_t time) { switch (event) { case BUTTON_EVENT_IN_BOTTOM_R: @@ -239,7 +246,7 @@ tp_button_area_handle_event(struct tp_dispatch *tp, case BUTTON_EVENT_IN_AREA: break; case BUTTON_EVENT_UP: - tp_button_set_state(tp, t, BUTTON_STATE_NONE, event); + tp_button_set_state(tp, t, BUTTON_STATE_NONE, event, time); break; case BUTTON_EVENT_PRESS: case BUTTON_EVENT_RELEASE: @@ -281,7 +288,8 @@ tp_button_release_other_bottom_touches(struct tp_dispatch *tp, static void tp_button_bottom_handle_event(struct tp_dispatch *tp, struct tp_touch *t, - enum button_event event) + enum button_event event, + uint64_t time) { switch (event) { case BUTTON_EVENT_IN_BOTTOM_R: @@ -291,13 +299,14 @@ tp_button_bottom_handle_event(struct tp_dispatch *tp, tp_button_set_state(tp, t, BUTTON_STATE_BOTTOM, - event); + event, + time); break; case BUTTON_EVENT_IN_TOP_R: case BUTTON_EVENT_IN_TOP_M: case BUTTON_EVENT_IN_TOP_L: case BUTTON_EVENT_IN_AREA: - tp_button_set_state(tp, t, BUTTON_STATE_AREA, event); + tp_button_set_state(tp, t, BUTTON_STATE_AREA, event, time); /* We just transitioned one finger from BOTTOM to AREA, * if there are other fingers in BOTTOM that started @@ -308,7 +317,7 @@ tp_button_bottom_handle_event(struct tp_dispatch *tp, t->button.initial_time); break; case BUTTON_EVENT_UP: - tp_button_set_state(tp, t, BUTTON_STATE_NONE, event); + tp_button_set_state(tp, t, BUTTON_STATE_NONE, event, time); break; case BUTTON_EVENT_PRESS: case BUTTON_EVENT_RELEASE: @@ -320,13 +329,14 @@ tp_button_bottom_handle_event(struct tp_dispatch *tp, static void tp_button_top_handle_event(struct tp_dispatch *tp, struct tp_touch *t, - enum button_event event) + enum button_event event, + uint64_t time) { switch (event) { case BUTTON_EVENT_IN_BOTTOM_R: case BUTTON_EVENT_IN_BOTTOM_M: case BUTTON_EVENT_IN_BOTTOM_L: - tp_button_set_state(tp, t, BUTTON_STATE_TOP_TO_IGNORE, event); + tp_button_set_state(tp, t, BUTTON_STATE_TOP_TO_IGNORE, event, time); break; case BUTTON_EVENT_IN_TOP_R: case BUTTON_EVENT_IN_TOP_M: @@ -335,13 +345,14 @@ tp_button_top_handle_event(struct tp_dispatch *tp, tp_button_set_state(tp, t, BUTTON_STATE_TOP_NEW, - event); + event, + time); break; case BUTTON_EVENT_IN_AREA: - tp_button_set_state(tp, t, BUTTON_STATE_TOP_TO_IGNORE, event); + tp_button_set_state(tp, t, BUTTON_STATE_TOP_TO_IGNORE, event, time); break; case BUTTON_EVENT_UP: - tp_button_set_state(tp, t, BUTTON_STATE_NONE, event); + tp_button_set_state(tp, t, BUTTON_STATE_NONE, event, time); break; case BUTTON_EVENT_PRESS: case BUTTON_EVENT_RELEASE: @@ -353,13 +364,14 @@ tp_button_top_handle_event(struct tp_dispatch *tp, static void tp_button_top_new_handle_event(struct tp_dispatch *tp, struct tp_touch *t, - enum button_event event) + enum button_event event, + uint64_t time) { switch(event) { case BUTTON_EVENT_IN_BOTTOM_R: case BUTTON_EVENT_IN_BOTTOM_M: case BUTTON_EVENT_IN_BOTTOM_L: - tp_button_set_state(tp, t, BUTTON_STATE_AREA, event); + tp_button_set_state(tp, t, BUTTON_STATE_AREA, event, time); break; case BUTTON_EVENT_IN_TOP_R: case BUTTON_EVENT_IN_TOP_M: @@ -368,21 +380,22 @@ tp_button_top_new_handle_event(struct tp_dispatch *tp, tp_button_set_state(tp, t, BUTTON_STATE_TOP_NEW, - event); + event, + time); break; case BUTTON_EVENT_IN_AREA: - tp_button_set_state(tp, t, BUTTON_STATE_AREA, event); + tp_button_set_state(tp, t, BUTTON_STATE_AREA, event, time); break; case BUTTON_EVENT_UP: - tp_button_set_state(tp, t, BUTTON_STATE_NONE, event); + tp_button_set_state(tp, t, BUTTON_STATE_NONE, event, time); break; case BUTTON_EVENT_PRESS: - tp_button_set_state(tp, t, BUTTON_STATE_TOP, event); + tp_button_set_state(tp, t, BUTTON_STATE_TOP, event, time); break; case BUTTON_EVENT_RELEASE: break; case BUTTON_EVENT_TIMEOUT: - tp_button_set_state(tp, t, BUTTON_STATE_TOP, event); + tp_button_set_state(tp, t, BUTTON_STATE_TOP, event, time); break; } } @@ -390,7 +403,8 @@ tp_button_top_new_handle_event(struct tp_dispatch *tp, static void tp_button_top_to_ignore_handle_event(struct tp_dispatch *tp, struct tp_touch *t, - enum button_event event) + enum button_event event, + uint64_t time) { switch(event) { case BUTTON_EVENT_IN_TOP_R: @@ -400,12 +414,14 @@ tp_button_top_to_ignore_handle_event(struct tp_dispatch *tp, tp_button_set_state(tp, t, BUTTON_STATE_TOP, - event); + event, + time); else tp_button_set_state(tp, t, BUTTON_STATE_TOP_NEW, - event); + event, + time); break; case BUTTON_EVENT_IN_BOTTOM_R: case BUTTON_EVENT_IN_BOTTOM_M: @@ -413,13 +429,13 @@ tp_button_top_to_ignore_handle_event(struct tp_dispatch *tp, case BUTTON_EVENT_IN_AREA: break; case BUTTON_EVENT_UP: - tp_button_set_state(tp, t, BUTTON_STATE_NONE, event); + tp_button_set_state(tp, t, BUTTON_STATE_NONE, event, time); break; case BUTTON_EVENT_PRESS: case BUTTON_EVENT_RELEASE: break; case BUTTON_EVENT_TIMEOUT: - tp_button_set_state(tp, t, BUTTON_STATE_IGNORE, event); + tp_button_set_state(tp, t, BUTTON_STATE_IGNORE, event, time); break; } } @@ -427,7 +443,8 @@ tp_button_top_to_ignore_handle_event(struct tp_dispatch *tp, static void tp_button_ignore_handle_event(struct tp_dispatch *tp, struct tp_touch *t, - enum button_event event) + enum button_event event, + uint64_t time) { switch (event) { case BUTTON_EVENT_IN_BOTTOM_R: @@ -439,7 +456,7 @@ tp_button_ignore_handle_event(struct tp_dispatch *tp, case BUTTON_EVENT_IN_AREA: break; case BUTTON_EVENT_UP: - tp_button_set_state(tp, t, BUTTON_STATE_NONE, event); + tp_button_set_state(tp, t, BUTTON_STATE_NONE, event, time); break; case BUTTON_EVENT_PRESS: t->button.current = BUTTON_EVENT_IN_AREA; @@ -461,25 +478,25 @@ tp_button_handle_event(struct tp_dispatch *tp, switch(t->button.state) { case BUTTON_STATE_NONE: - tp_button_none_handle_event(tp, t, event); + tp_button_none_handle_event(tp, t, event, time); break; case BUTTON_STATE_AREA: - tp_button_area_handle_event(tp, t, event); + tp_button_area_handle_event(tp, t, event, time); break; case BUTTON_STATE_BOTTOM: - tp_button_bottom_handle_event(tp, t, event); + tp_button_bottom_handle_event(tp, t, event, time); break; case BUTTON_STATE_TOP: - tp_button_top_handle_event(tp, t, event); + tp_button_top_handle_event(tp, t, event, time); break; case BUTTON_STATE_TOP_NEW: - tp_button_top_new_handle_event(tp, t, event); + tp_button_top_new_handle_event(tp, t, event, time); break; case BUTTON_STATE_TOP_TO_IGNORE: - tp_button_top_to_ignore_handle_event(tp, t, event); + tp_button_top_to_ignore_handle_event(tp, t, event, time); break; case BUTTON_STATE_IGNORE: - tp_button_ignore_handle_event(tp, t, event); + tp_button_ignore_handle_event(tp, t, event, time); break; } |