--- SDL_x11events.c.old 2010-08-28 22:14:58 +0900 +++ SDL_x11events.c 2010-08-28 22:58:20 +0900 @@ -57,6 +57,11 @@ static SDLKey MISC_keymap[256]; SDLKey X11_TranslateKeycode(Display *display, KeyCode kc); +/* Pending resize target for ConfigureNotify (so outdated events don't + * cause inappropriate resize events) */ +int X11_PendingConfigureNotifyWidth = -1; +int X11_PendingConfigureNotifyHeight = -1; + #ifdef X_HAVE_UTF8_STRING Uint32 Utf8ToUcs4(const Uint8 *utf8) @@ -819,6 +824,16 @@ #ifdef DEBUG_XEVENTS printf("ConfigureNotify! (resize: %dx%d)\n", xevent.xconfigure.width, xevent.xconfigure.height); #endif + if ((X11_PendingConfigureNotifyWidth != -1) && + (X11_PendingConfigureNotifyHeight != -1)) { + if ((xevent.xconfigure.width != X11_PendingConfigureNotifyWidth) && + (xevent.xconfigure.height != X11_PendingConfigureNotifyHeight)) { + /* Event is from before the resize, so ignore. */ + break; + } + X11_PendingConfigureNotifyWidth = -1; + X11_PendingConfigureNotifyHeight = -1; + } if ( SDL_VideoSurface ) { if ((xevent.xconfigure.width != SDL_VideoSurface->w) || (xevent.xconfigure.height != SDL_VideoSurface->h)) { --- SDL_x11events_c.h.old 2009-10-13 08:07:15 +0900 +++ SDL_x11events_c.h 2010-08-28 22:48:53 +0900 @@ -27,3 +27,6 @@ extern void X11_InitOSKeymap(_THIS); extern void X11_PumpEvents(_THIS); extern void X11_SetKeyboardState(Display *display, const char *key_vec); + +/* Variables to be exported */ +extern int X11_PendingConfigureNotifyWidth, X11_PendingConfigureNotifyHeight; --- SDL_x11video.c.old 2010-08-28 21:33:20 +0900 +++ SDL_x11video.c 2010-08-28 22:50:26 +0900 @@ -1159,6 +1159,8 @@ current = NULL; goto done; } + X11_PendingConfigureNotifyWidth = width; + X11_PendingConfigureNotifyHeight = height; } else { if (X11_CreateWindow(this,current,width,height,bpp,flags) < 0) { current = NULL;