Navigation Menu

Skip to content

Commit

Permalink
Ignore old ConfigureNotify events during X11 window resize.
Browse files Browse the repository at this point in the history
Fixes Bugzilla #1049.

Thanks to Andrew Church for the patch!
  • Loading branch information
icculus committed Aug 21, 2011
1 parent f5c1ccd commit c701387
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/video/x11/SDL_x11events.c
Expand Up @@ -57,6 +57,12 @@ static SDLKey ODD_keymap[256];
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)
Expand Down Expand Up @@ -819,6 +825,16 @@ printf("MapNotify!\n");
#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)) {
Expand Down
5 changes: 5 additions & 0 deletions src/video/x11/SDL_x11events_c.h
Expand Up @@ -27,3 +27,8 @@
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;
extern int X11_PendingConfigureNotifyHeight;

2 changes: 2 additions & 0 deletions src/video/x11/SDL_x11video.c
Expand Up @@ -1161,6 +1161,8 @@ SDL_Surface *X11_SetVideoMode(_THIS, SDL_Surface *current,
current = NULL;
goto done;
}
X11_PendingConfigureNotifyWidth = width;
X11_PendingConfigureNotifyHeight = height;
} else {
if (X11_CreateWindow(this,current,width,height,bpp,flags) < 0) {
current = NULL;
Expand Down

0 comments on commit c701387

Please sign in to comment.