Mercurial > sdl-ios-xcode
changeset 4264:d6f4cc9a5bf6 SDL-1.2
Batch x11 dga mouse motion events into a single SDL event.
Untested attempt to fix Bugzilla #609. Do not merge into 1.3 in any case.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Tue, 29 Sep 2009 11:28:43 +0000 |
parents | 3c12d2e84bcb |
children | c7b1d5eaa77d |
files | src/video/x11/SDL_x11events.c src/video/x11/SDL_x11video.h |
diffstat | 2 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/video/x11/SDL_x11events.c Tue Sep 29 06:31:29 2009 +0000 +++ b/src/video/x11/SDL_x11events.c Tue Sep 29 11:28:43 2009 +0000 @@ -515,9 +515,9 @@ #ifdef DEBUG_MOTION printf("DGA motion: %d,%d\n", xevent.xmotion.x_root, xevent.xmotion.y_root); #endif - posted = SDL_PrivateMouseMotion(0, 1, - xevent.xmotion.x_root, - xevent.xmotion.y_root); + /* batch DGA motion into one event, queued later. */ + dga_x += xevent.xmotion.x_root; + dga_y += xevent.xmotion.y_root; } else { posted = X11_WarpedMotion(this,&xevent); } @@ -931,6 +931,16 @@ X11_DispatchEvent(this); ++pending; } + + /* We batch up all the DGA motion events and generate a single SDL + event from them, since newer x.org releases might send a LOT of + these at once and flood the SDL event queue. --ryan. */ + if (dga_x || dga_y) { + SDL_PrivateMouseMotion(0, 1, dga_x, dga_y); + dga_x = 0; + dga_y = 0; + } + if ( switch_waiting ) { Uint32 now;
--- a/src/video/x11/SDL_x11video.h Tue Sep 29 06:31:29 2009 +0000 +++ b/src/video/x11/SDL_x11video.h Tue Sep 29 11:28:43 2009 +0000 @@ -70,6 +70,8 @@ /* Direct Graphics Access extension information */ int using_dga; + Sint16 dga_x; + Sint16 dga_y; #ifndef NO_SHARED_MEMORY /* MIT shared memory extension information */ @@ -172,6 +174,8 @@ #define SDL_IC (this->hidden->X11_IC) #define SDL_windowid (this->hidden->SDL_windowid) #define using_dga (this->hidden->using_dga) +#define dga_x (this->hidden->dga_x) +#define dga_y (this->hidden->dga_y) #define use_mitshm (this->hidden->use_mitshm) #define shminfo (this->hidden->shminfo) #define SDL_Ximage (this->hidden->Ximage)