try to reduce chances of `diffx`/`diffy` inaccuracy

by forcing a full frame between calculations of `diffx` and `diffy`,
we can at least ensure that e.g. a double `mousemove` event within a
single frame does not produce inaccurate `diffx` and `diffy` values
on the second event, which will replace the first as if it never
happened. This does not protect us from events of differring types,
such as if a `move` and `drag` both happen in the same frame -- but
collisions of this nature should be pretty rare.
fix mistake, caught by tests

yay for tests