summaryrefslogtreecommitdiff
path: root/src/evdev-mt-touchpad-buttons.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/evdev-mt-touchpad-buttons.c')
-rw-r--r--src/evdev-mt-touchpad-buttons.c105
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;
}