diff -r 930614179450 src/events/SDL_events.c --- a/src/events/SDL_events.c Fri Dec 03 16:55:25 2010 -0800 +++ b/src/events/SDL_events.c Wed Jan 12 22:22:40 2011 +0100 @@ -264,8 +264,9 @@ /* Add an event to the event queue -- called with the queue locked */ static int SDL_AddEvent(SDL_Event *event) { - int tail, added; + int tail, added, prev_tail; + prev_tail = (SDL_EventQ.tail+MAXEVENTS-1)%MAXEVENTS; tail = (SDL_EventQ.tail+1)%MAXEVENTS; if ( tail == SDL_EventQ.head ) { /* Overflow, drop event */ @@ -279,6 +280,17 @@ SDL_EventQ.event[SDL_EventQ.tail].syswm.msg = &SDL_EventQ.wmmsg[next]; SDL_EventQ.wmmsg_next = (next+1)%MAXEVENTS; + } else if ((event->type == SDL_MOUSEMOTION) + && (SDL_EventQ.head != SDL_EventQ.tail) + && (SDL_EventQ.event[prev_tail].type == SDL_MOUSEMOTION) + && (SDL_EventQ.event[prev_tail].motion.state == event->motion.state)) { + SDL_EventQ.event[prev_tail].motion.x = event->motion.x; + SDL_EventQ.event[prev_tail].motion.y = event->motion.y; + SDL_EventQ.event[prev_tail].motion.xrel += event->motion.xrel; + SDL_EventQ.event[prev_tail].motion.yrel += event->motion.yrel; + + /* Keep current tail */ + tail = SDL_EventQ.tail; } SDL_EventQ.tail = tail; added = 1;