This patch aims to fix bug 374867 in a way described at my comment #3 there:
It behaves in a following manner: when I'm moving cursor, each time it jumps by some vector (dx, dy), which depends on the speed of cursor movement. It seems like there is a
following check: if (x+dx, y+dy) is outside the visible area, just ignore that move, and thus make the cursor stuck at some position away from the border.
If I move slowly, then (dx, dy) is small, which allows me to come closer to the border and eventually touch it (thus triggering the edge action). But if I keep moving fast, the cursor is
stuck.
The proper behavior would be to move cursor exactly at the border instead.
Example: if I move cursor fast towards i.e. upper-left angle, it generates bunch of updatePosition() calls with position being somewhere around (-100, -100).
Current code just ignores those events; new code just moves it to (0, 0) instead.