From f708868dbd6e81dcea0580dcd466630b2632ef69 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 29 Jan 2006 09:13:36 +0000 Subject: [PATCH] Cleaned up the app registration stuff a bit --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401291 --- src/video/wincommon/SDL_sysevents.c | 48 ++++++++++++++--------------- src/video/windib/SDL_dibevents.c | 6 ++-- src/video/windib/SDL_dibvideo.c | 1 - src/video/windx5/SDL_dx5events.c | 6 ++-- src/video/windx5/SDL_dx5video.c | 1 - 5 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/video/wincommon/SDL_sysevents.c b/src/video/wincommon/SDL_sysevents.c index 521a2a0e7..93be09a3a 100644 --- a/src/video/wincommon/SDL_sysevents.c +++ b/src/video/wincommon/SDL_sysevents.c @@ -58,6 +58,7 @@ LPWSTR SDL_Appname = NULL; #else LPSTR SDL_Appname = NULL; #endif +Uint32 SDL_Appstyle = 0; HINSTANCE SDL_Instance = NULL; HWND SDL_Window = NULL; RECT SDL_bounds = {0, 0, 0, 0}; @@ -693,36 +694,40 @@ int SDL_RegisterApp(char *name, Uint32 style, void *hInst) return(0); } - /* This function needs to be passed the correct process handle - by the application. - */ - if ( ! hInst ) { - hInst = SDL_GetModuleHandle(); +#ifndef CS_BYTEALIGNCLIENT +#define CS_BYTEALIGNCLIENT 0 +#endif + if ( ! name && ! SDL_Appname ) { + name = "SDL_app"; + SDL_Appstyle = CS_BYTEALIGNCLIENT; + SDL_Instance = hInst ? hInst : SDL_GetModuleHandle(); } - /* Register the application class */ - class.hCursor = NULL; + if ( name ) { #ifdef _WIN32_WCE - { /* WinCE uses the UNICODE version */ int nLen = strlen(name)+1; SDL_Appname = malloc(nLen*2); MultiByteToWideChar(CP_ACP, 0, name, -1, SDL_Appname, nLen); - } #else - { int nLen = strlen(name)+1; SDL_Appname = malloc(nLen); strcpy(SDL_Appname, name); - } #endif /* _WIN32_WCE */ - class.hIcon = LoadImage(hInst, SDL_Appname, IMAGE_ICON, + SDL_Appstyle = style; + SDL_Instance = hInst ? hInst : SDL_GetModuleHandle(); + } + + /* Register the application class */ + class.hCursor = NULL; + class.hIcon = LoadImage(SDL_Instance, SDL_Appname, + IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR); class.lpszMenuName = NULL; class.lpszClassName = SDL_Appname; class.hbrBackground = NULL; - class.hInstance = hInst; - class.style = style; + class.hInstance = SDL_Instance; + class.style = SDL_Appstyle; #ifdef HAVE_OPENGL class.style |= CS_OWNDC; #endif @@ -733,7 +738,6 @@ int SDL_RegisterApp(char *name, Uint32 style, void *hInst) SDL_SetError("Couldn't register application class"); return(-1); } - SDL_Instance = hInst; #ifdef WM_MOUSELEAVE /* Get the version of TrackMouseEvent() we use */ @@ -757,23 +761,19 @@ int SDL_RegisterApp(char *name, Uint32 style, void *hInst) return(0); } -/* - * Unregisters the windowclass registered in SDL_RegisterApp above. - * Called from DIB_VideoQuit and DX5_VideoQuit when - * SDL_QuitSubSystem(INIT_VIDEO) is called. - */ +/* Unregisters the windowclass registered in SDL_RegisterApp above. */ 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)) { + if ( app_registered ) { + /* Check for any registered window classes. */ + if ( GetClassInfo(SDL_Instance, SDL_Appname, &class) ) { UnregisterClass(SDL_Appname, SDL_Instance); } + app_registered = 0; } - app_registered = 0; } #ifndef NO_GETKEYBOARDSTATE diff --git a/src/video/windib/SDL_dibevents.c b/src/video/windib/SDL_dibevents.c index c9b4c9bf7..979ad6da5 100644 --- a/src/video/windib/SDL_dibevents.c +++ b/src/video/windib/SDL_dibevents.c @@ -406,10 +406,7 @@ int DIB_CreateWindow(_THIS) { char *windowid = getenv("SDL_WINDOWID"); -#ifndef CS_BYTEALIGNCLIENT -#define CS_BYTEALIGNCLIENT 0 -#endif - SDL_RegisterApp("SDL_app", CS_BYTEALIGNCLIENT, 0); + SDL_RegisterApp(NULL, 0, 0); SDL_windowid = (windowid != NULL); if ( SDL_windowid ) { @@ -452,4 +449,5 @@ void DIB_DestroyWindow(_THIS) } else { DestroyWindow(SDL_Window); } + SDL_UnregisterApp(); } diff --git a/src/video/windib/SDL_dibvideo.c b/src/video/windib/SDL_dibvideo.c index 96bda2aeb..5e6e4d79e 100644 --- a/src/video/windib/SDL_dibvideo.c +++ b/src/video/windib/SDL_dibvideo.c @@ -958,7 +958,6 @@ void DIB_VideoQuit(_THIS) } DIB_QuitGamma(this); DIB_DestroyWindow(this); - SDL_UnregisterApp(); FlushMessageQueue(); SDL_Window = NULL; diff --git a/src/video/windx5/SDL_dx5events.c b/src/video/windx5/SDL_dx5events.c index ff4177279..478d45a90 100644 --- a/src/video/windx5/SDL_dx5events.c +++ b/src/video/windx5/SDL_dx5events.c @@ -858,10 +858,7 @@ int DX5_CreateWindow(_THIS) SDL_DIfun[i] = NULL; } -#ifndef CS_BYTEALIGNCLIENT -#define CS_BYTEALIGNCLIENT 0 -#endif - SDL_RegisterApp("SDL_app", CS_BYTEALIGNCLIENT, 0); + SDL_RegisterApp(NULL, 0, 0); SDL_windowid = (windowid != NULL); if ( SDL_windowid ) { @@ -907,4 +904,5 @@ void DX5_DestroyWindow(_THIS) } else { DestroyWindow(SDL_Window); } + SDL_UnregisterApp(); } diff --git a/src/video/windx5/SDL_dx5video.c b/src/video/windx5/SDL_dx5video.c index 41b01ec52..fe7705a9d 100644 --- a/src/video/windx5/SDL_dx5video.c +++ b/src/video/windx5/SDL_dx5video.c @@ -2387,7 +2387,6 @@ void DX5_VideoQuit(_THIS) DIB_QuitGamma(this); if ( SDL_Window ) { DX5_DestroyWindow(this); - SDL_UnregisterApp(); FlushMessageQueue(); }