[PATCH libinput 2/3] touchpad: store the time in the motion history
Peter Hutterer
peter.hutterer at who-t.net
Fri Sep 1 06:09:17 UTC 2017
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
src/evdev-mt-touchpad.c | 20 +++++++++++---------
src/evdev-mt-touchpad.h | 5 ++++-
2 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index 80e74efd..fed25824 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -36,7 +36,7 @@
#define THUMB_MOVE_TIMEOUT ms2us(300)
#define FAKE_FINGER_OVERFLOW (1 << 7)
-static inline struct device_coords *
+static inline struct tp_history_point*
tp_motion_history_offset(struct tp_touch *t, int offset)
{
int offset_index =
@@ -90,7 +90,8 @@ tp_motion_history_push(struct tp_touch *t)
if (t->history.count < TOUCHPAD_HISTORY_LENGTH)
t->history.count++;
- t->history.samples[motion_index] = t->point;
+ t->history.samples[motion_index].point = t->point;
+ t->history.samples[motion_index].time = t->time;
t->history.index = motion_index;
}
@@ -293,10 +294,10 @@ tp_get_delta(struct tp_touch *t)
if (t->history.count <= 1)
return zero;
- delta.x = tp_motion_history_offset(t, 0)->x -
- tp_motion_history_offset(t, 1)->x;
- delta.y = tp_motion_history_offset(t, 0)->y -
- tp_motion_history_offset(t, 1)->y;
+ delta.x = tp_motion_history_offset(t, 0)->point.x -
+ tp_motion_history_offset(t, 1)->point.x;
+ delta.y = tp_motion_history_offset(t, 0)->point.y -
+ tp_motion_history_offset(t, 1)->point.y;
return tp_normalize_delta(t->tp, delta);
}
@@ -1252,9 +1253,10 @@ tp_need_motion_history_reset(struct tp_dispatch *tp)
static bool
tp_detect_jumps(const struct tp_dispatch *tp, struct tp_touch *t)
{
- struct device_coords *last, delta;
+ struct device_coords delta;
struct phys_coords mm;
const int JUMP_THRESHOLD_MM = 20;
+ struct tp_history_point *last;
/* We haven't seen pointer jumps on Wacom tablets yet, so exclude
* those.
@@ -1268,8 +1270,8 @@ tp_detect_jumps(const struct tp_dispatch *tp, struct tp_touch *t)
/* called before tp_motion_history_push, so offset 0 is the most
* recent coordinate */
last = tp_motion_history_offset(t, 0);
- delta.x = abs(t->point.x - last->x);
- delta.y = abs(t->point.y - last->y);
+ delta.x = abs(t->point.x - last->point.x);
+ delta.y = abs(t->point.y - last->point.y);
mm = evdev_device_unit_delta_to_mm(tp->device, &delta);
return hypot(mm.x, mm.y) > JUMP_THRESHOLD_MM;
diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h
index 664514de..3f0d821c 100644
--- a/src/evdev-mt-touchpad.h
+++ b/src/evdev-mt-touchpad.h
@@ -164,7 +164,10 @@ struct tp_touch {
} quirks;
struct {
- struct device_coords samples[TOUCHPAD_HISTORY_LENGTH];
+ struct tp_history_point {
+ uint64_t time;
+ struct device_coords point;
+ } samples[TOUCHPAD_HISTORY_LENGTH];
unsigned int index;
unsigned int count;
} history;
--
2.13.5
More information about the wayland-devel
mailing list