Mercurial > sdl-ios-xcode
changeset 1145:d31afac94eff
Patch from Martin Lange (mala-sdl at hotmail.com) to unregister SDL's win32
windowclass when shutting down the video subsystem...this allows you to
safely unload/reload the SDL shared library on Windows between
initializations.
Discussion is here:
http://www.devolution.com/pipermail/sdl/2005-February/067424.html
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Tue, 27 Sep 2005 09:00:42 +0000 |
parents | 509295d5a023 |
children | ab0154afe938 |
files | include/SDL_main.h src/video/wincommon/SDL_sysevents.c src/video/windib/SDL_dibvideo.c src/video/windx5/SDL_dx5video.c |
diffstat | 4 files changed, 27 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/include/SDL_main.h Tue Sep 27 08:36:28 2005 +0000 +++ b/include/SDL_main.h Tue Sep 27 09:00:42 2005 +0000 @@ -69,7 +69,8 @@ extern DECLSPEC void SDLCALL SDL_SetModuleHandle(void *hInst); /* This can also be called, but is no longer necessary */ extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, void *hInst); - +/* This can also be called, but is no longer necessary (SDL_Quit calls it) */ +extern DECLSPEC void SDLCALL SDL_UnregisterApp(); #ifdef __cplusplus } #endif
--- a/src/video/wincommon/SDL_sysevents.c Tue Sep 27 08:36:28 2005 +0000 +++ b/src/video/wincommon/SDL_sysevents.c Tue Sep 27 09:00:42 2005 +0000 @@ -562,11 +562,6 @@ if ( SDL_handle ) { handle = SDL_handle; } else { - /* Warning: - If SDL is built as a DLL, this will return a handle to - the DLL, not the application, and DirectInput may fail - to initialize. - */ handle = GetModuleHandle(NULL); } return(handle); @@ -575,17 +570,18 @@ /* This allows the SDL_WINDOWID hack */ const char *SDL_windowid = NULL; +static int app_registered = 0; + /* Register the class for this application -- exported for winmain.c */ int SDL_RegisterApp(char *name, Uint32 style, void *hInst) { - static int initialized = 0; WNDCLASS class; #ifdef WM_MOUSELEAVE HMODULE handle; #endif /* Only do this once... */ - if ( initialized ) { + if ( app_registered ) { return(0); } @@ -646,7 +642,26 @@ /* Check for SDL_WINDOWID hack */ SDL_windowid = getenv("SDL_WINDOWID"); - initialized = 1; + app_registered = 1; return(0); } +/* + * Unregisters the windowclass registered in SDL_RegisterApp above. + * Called from DIB_VideoQuit and DX5_VideoQuit when + * SDL_QuitSubSystem(INIT_VIDEO) is called. + */ +void SDL_UnRegisterApp() +{ + WNDCLASS class; + + /* SDL_RegisterApp might not have been called before */ + if (app_registered) { + /* Check for any registered windowclasses. */ + if (GetClassInfo(SDL_Instance, SDL_Appname, &class)) { + UnregisterClass(SDL_Appname, SDL_Instance); + } + } + app_registered = 0; +} +