drift
r_timestamp(&action0, &r->btstate, &r->e3b, &r->drift);
if (r->drift.terminate) {
r->drift.last_activity = r->drift.current_ts;
if (r_drift (&r->drift, &action2))
r_init_drift(struct quirks *q, struct drift *d)
r_init_drift(q, &r->drift);
r_timestamp(act, &r->btstate, &r->e3b, &r->drift);
r_timestamp(&newaction, &r->btstate, &r->e3b, &r->drift);
r_drift (struct drift *drift, mousestatus_t *act)
tssub(&drift->current_ts, &drift->last_activity, &tmp);
if (tscmp(&tmp, &drift->after_ts, >)) {
tssub(&drift->current_ts, &drift->since, &tmp);
if (tscmp(&tmp, &drift->time_ts, <)) {
drift->last.x += act->dx;
drift->last.y += act->dy;
if (tscmp(&tmp, &drift->twotime_ts, >))
drift->previous.x = drift->previous.y = 0;
drift->previous = drift->last;
drift->last.x = act->dx;
drift->last.y = act->dy;
drift->since = drift->current_ts;
if ((u_int)abs(drift->last.x) + abs(drift->last.y) > drift->distance) {
act->dx = drift->previous.x + drift->last.x;
act->dy = drift->previous.y + drift->last.y;
tsclr(&drift->since);
drift->last.x = drift->last.y = 0;
drift->last_activity = drift->current_ts;
r_timestamp(a2, &r->btstate, e3b, &r->drift);
struct drift *drift)
drift->current_ts = ts1;
struct drift drift;
struct e3bstate *e3b, struct drift *drift);
static bool r_drift(struct drift *, mousestatus_t *);