Ignore old ConfigureNotify events during X11 window resize.
Fixes Bugzilla #1049. Thanks to Andrew Church for the patch! --HG-- branch : SDL-1.2
This commit is contained in:
parent
07422a4c00
commit
0881f2aa01
3 changed files with 23 additions and 0 deletions
|
@ -57,6 +57,12 @@ static SDLKey ODD_keymap[256];
|
||||||
static SDLKey MISC_keymap[256];
|
static SDLKey MISC_keymap[256];
|
||||||
SDLKey X11_TranslateKeycode(Display *display, KeyCode kc);
|
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
|
#ifdef X_HAVE_UTF8_STRING
|
||||||
Uint32 Utf8ToUcs4(const Uint8 *utf8)
|
Uint32 Utf8ToUcs4(const Uint8 *utf8)
|
||||||
|
@ -819,6 +825,16 @@ printf("MapNotify!\n");
|
||||||
#ifdef DEBUG_XEVENTS
|
#ifdef DEBUG_XEVENTS
|
||||||
printf("ConfigureNotify! (resize: %dx%d)\n", xevent.xconfigure.width, xevent.xconfigure.height);
|
printf("ConfigureNotify! (resize: %dx%d)\n", xevent.xconfigure.width, xevent.xconfigure.height);
|
||||||
#endif
|
#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 ( SDL_VideoSurface ) {
|
||||||
if ((xevent.xconfigure.width != SDL_VideoSurface->w) ||
|
if ((xevent.xconfigure.width != SDL_VideoSurface->w) ||
|
||||||
(xevent.xconfigure.height != SDL_VideoSurface->h)) {
|
(xevent.xconfigure.height != SDL_VideoSurface->h)) {
|
||||||
|
|
|
@ -27,3 +27,8 @@
|
||||||
extern void X11_InitOSKeymap(_THIS);
|
extern void X11_InitOSKeymap(_THIS);
|
||||||
extern void X11_PumpEvents(_THIS);
|
extern void X11_PumpEvents(_THIS);
|
||||||
extern void X11_SetKeyboardState(Display *display, const char *key_vec);
|
extern void X11_SetKeyboardState(Display *display, const char *key_vec);
|
||||||
|
|
||||||
|
/* Variables to be exported */
|
||||||
|
extern int X11_PendingConfigureNotifyWidth;
|
||||||
|
extern int X11_PendingConfigureNotifyHeight;
|
||||||
|
|
||||||
|
|
|
@ -1161,6 +1161,8 @@ SDL_Surface *X11_SetVideoMode(_THIS, SDL_Surface *current,
|
||||||
current = NULL;
|
current = NULL;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
X11_PendingConfigureNotifyWidth = width;
|
||||||
|
X11_PendingConfigureNotifyHeight = height;
|
||||||
} else {
|
} else {
|
||||||
if (X11_CreateWindow(this,current,width,height,bpp,flags) < 0) {
|
if (X11_CreateWindow(this,current,width,height,bpp,flags) < 0) {
|
||||||
current = NULL;
|
current = NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue