Skip to content

Commit

Permalink
(patch tweaked a bit)
Browse files Browse the repository at this point in the history
Date: Tue, 14 Mar 2006 03:30:11 +0000
From: Peter Mulholland
Subject: [SDL] Windows MessageBox() strangeness fixes

Hello all,

I *think* this should fix the issues that people were seeing with
MessageBox() not working and therefore assert() on mingw/msvc. Forgive
me if i've screwed up making the diff file - I'm a total newb when it
comes to things like CVS and diff.

It modifies a few files as I saw that FlushMessageQueue() was in both
the windx5 and windib driver, so I moved this into wincommon. It was
also in the gapi driver, so I changed that too. The function is now
WIN_FlushMessageQueue() in src/video/wincommon/SDL_syswm.c
  • Loading branch information
slouken committed Mar 14, 2006
1 parent d4e96af commit e3361f3
Show file tree
Hide file tree
Showing 8 changed files with 69 additions and 34 deletions.
18 changes: 6 additions & 12 deletions src/video/gapi/SDL_gapivideo.c
Expand Up @@ -731,6 +731,12 @@ SDL_Surface *GAPI_SetVideoMode(_THIS, SDL_Surface *current,
ShowWindow(SDL_Window, SW_SHOW);
SetForegroundWindow(SDL_Window);

/* JC 14 Mar 2006
Flush the message loop or this can cause big problems later
Especially if the user decides to use dialog boxes or assert()!
*/
WIN_FlushMessageQueue();

/* Open GAPI display */
if( !gapi->useVga && this->hidden->useGXOpenDisplay )
if( !gapi->gxFunc.GXOpenDisplay(SDL_Window, GX_FULLSCREEN) )
Expand Down Expand Up @@ -1103,17 +1109,6 @@ static void GAPI_UpdateRects(_THIS, int numrects, SDL_Rect *rects)
gapi->gxFunc.GXEndDraw();
}

static void FlushMessageQueue()
{
MSG msg;
while ( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) {
if ( msg.message == WM_QUIT ) break;
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}


/* Note: If we are terminated, this could be called in the middle of
another SDL video routine -- notably UpdateRects.
*/
Expand All @@ -1138,7 +1133,6 @@ void GAPI_VideoQuit(_THIS)

DIB_DestroyWindow(this);
SDL_UnregisterApp();
FlushMessageQueue();

SDL_Window = NULL;
#if defined(_WIN32_WCE)
Expand Down
2 changes: 2 additions & 0 deletions src/video/wincommon/SDL_lowvideo.h
Expand Up @@ -79,6 +79,8 @@ extern BOOL SDL_windowid;
/* Variables and functions exported to other parts of the native video
subsystem (SDL_sysevents.c)
*/
extern void WIN_FlushMessageQueue();

/* Called by windows message loop when system palette is available */
extern void (*WIN_RealizePalette)(_THIS);

Expand Down
15 changes: 15 additions & 0 deletions src/video/wincommon/SDL_sysevents.c
Expand Up @@ -169,6 +169,21 @@ static void GapiTransform(SDL_ScreenOrientation rotate, char hires, Sint16 *x, S

#endif

/* JC 14 Mar 2006
This is used all over the place, in the windib driver and in the dx5 driver
So we may as well stick it here instead of having multiple copies scattered
about
*/
void WIN_FlushMessageQueue()
{
MSG msg;
while ( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) {
if ( msg.message == WM_QUIT ) break;
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}

static void SDL_RestoreGameMode(void)
{
#ifdef _WIN32_WCE
Expand Down
7 changes: 7 additions & 0 deletions src/video/wincommon/SDL_wingl.c
Expand Up @@ -48,12 +48,16 @@ static int WIN_GL_ResetWindow(_THIS)
style = GetWindowLong(SDL_Window, GWL_STYLE);
GetWindowRect(SDL_Window, &rect);
DestroyWindow(SDL_Window);
WIN_FlushMessageQueue();

SDL_Window = CreateWindow(SDL_Appname, SDL_Appname,
style,
rect.left, rect.top,
(rect.right-rect.left)+1,
(rect.top-rect.bottom)+1,
NULL, NULL, SDL_Instance, NULL);
WIN_FlushMessageQueue();

if ( SDL_Window ) {
this->SetCaption(this, this->wm_title, this->wm_icon);
} else {
Expand Down Expand Up @@ -118,6 +122,8 @@ static void Init_WGL_ARB_extensions(_THIS)
hwnd = CreateWindow(SDL_Appname, SDL_Appname, WS_POPUP | WS_DISABLED,
0, 0, 10, 10,
NULL, NULL, SDL_Instance, NULL);
WIN_FlushMessageQueue();

hdc = GetDC(hwnd);

pformat = ChoosePixelFormat(hdc, &GL_pfd);
Expand Down Expand Up @@ -158,6 +164,7 @@ static void Init_WGL_ARB_extensions(_THIS)
}
ReleaseDC(hwnd, hdc);
DestroyWindow(hwnd);
WIN_FlushMessageQueue();
}

#endif /* SDL_VIDEO_OPENGL */
Expand Down
13 changes: 13 additions & 0 deletions src/video/windib/SDL_dibevents.c
Expand Up @@ -438,6 +438,13 @@ int DIB_CreateWindow(_THIS)
}
ShowWindow(SDL_Window, SW_HIDE);
}

/* JC 14 Mar 2006
Flush the message loop or this can cause big problems later
Especially if the user decides to use dialog boxes or assert()!
*/
WIN_FlushMessageQueue();

return(0);
}

Expand All @@ -449,4 +456,10 @@ void DIB_DestroyWindow(_THIS)
DestroyWindow(SDL_Window);
}
SDL_UnregisterApp();

/* JC 14 Mar 2006
Flush the message loop or this can cause big problems later
Especially if the user decides to use dialog boxes or assert()!
*/
WIN_FlushMessageQueue();
}
18 changes: 7 additions & 11 deletions src/video/windib/SDL_dibvideo.c
Expand Up @@ -291,6 +291,7 @@ int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat)
if ( DIB_CreateWindow(this) < 0 ) {
return(-1);
}

#if !SDL_AUDIO_DISABLED
DX5_SoundFocus(SDL_Window);
#endif
Expand Down Expand Up @@ -818,6 +819,12 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current,
video->flags |= SDL_OPENGL;
}

/* JC 14 Mar 2006
Flush the message loop or this can cause big problems later
Especially if the user decides to use dialog boxes or assert()!
*/
WIN_FlushMessageQueue();

/* We're live! */
return(video);
}
Expand Down Expand Up @@ -1014,16 +1021,6 @@ int DIB_GetGammaRamp(_THIS, Uint16 *ramp)
#endif /* !NO_GAMMA_SUPPORT */
}

static void FlushMessageQueue()
{
MSG msg;
while ( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) {
if ( msg.message == WM_QUIT ) break;
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}

void DIB_VideoQuit(_THIS)
{
/* Destroy the window and everything associated with it */
Expand Down Expand Up @@ -1051,7 +1048,6 @@ void DIB_VideoQuit(_THIS)
}
DIB_QuitGamma(this);
DIB_DestroyWindow(this);
FlushMessageQueue();

SDL_Window = NULL;

Expand Down
12 changes: 12 additions & 0 deletions src/video/windx5/SDL_dx5events.c
Expand Up @@ -892,6 +892,12 @@ int DX5_CreateWindow(_THIS)
return(-1);
}

/* JC 14 Mar 2006
Flush the message loop or this can cause big problems later
Especially if the user decides to use dialog boxes or assert()!
*/
WIN_FlushMessageQueue();

/* Ready to roll */
return(0);
}
Expand All @@ -908,4 +914,10 @@ void DX5_DestroyWindow(_THIS)
DestroyWindow(SDL_Window);
}
SDL_UnregisterApp();

/* JC 14 Mar 2006
Flush the message loop or this can cause big problems later
Especially if the user decides to use dialog boxes or assert()!
*/
WIN_FlushMessageQueue();
}
18 changes: 7 additions & 11 deletions src/video/windx5/SDL_dx5video.c
Expand Up @@ -902,6 +902,7 @@ int DX5_VideoInit(_THIS, SDL_PixelFormat *vformat)
if ( DX5_CreateWindow(this) < 0 ) {
return(-1);
}

#if !SDL_AUDIO_DISABLED
DX5_SoundFocus(SDL_Window);
#endif
Expand Down Expand Up @@ -1604,6 +1605,12 @@ SDL_Surface *DX5_SetVideoMode(_THIS, SDL_Surface *current,
SetForegroundWindow(SDL_Window);
SDL_resizing = 0;

/* JC 14 Mar 2006
Flush the message loop or this can cause big problems later
Especially if the user decides to use dialog boxes or assert()!
*/
WIN_FlushMessageQueue();

/* We're live! */
return(video);
}
Expand Down Expand Up @@ -2345,16 +2352,6 @@ static int DX5_GetGammaRamp(_THIS, Uint16 *ramp)
#endif /* !IDirectDrawGammaControl_SetGammaRamp */
}

static void FlushMessageQueue()
{
MSG msg;
while ( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) {
if ( msg.message == WM_QUIT ) break;
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}

void DX5_VideoQuit(_THIS)
{
int i, j;
Expand Down Expand Up @@ -2398,7 +2395,6 @@ void DX5_VideoQuit(_THIS)
DIB_QuitGamma(this);
if ( SDL_Window ) {
DX5_DestroyWindow(this);
FlushMessageQueue();
}

/* Free our window icon */
Expand Down

0 comments on commit e3361f3

Please sign in to comment.