Module: wine Branch: master Commit: d4185badf1731184698857c7ecf271795335629f URL: http://source.winehq.org/git/wine.git/?a=commit;h=d4185badf1731184698857c7ec...
Author: Maarten Lankhorst m.b.lankhorst@gmail.com Date: Mon Nov 29 10:44:16 2010 +0100
quartz: Unregister window class after shutdown.
---
dlls/quartz/main.c | 2 ++ dlls/quartz/quartz_private.h | 1 + dlls/quartz/videorenderer.c | 32 ++++++++++++++++++++------------ 3 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/dlls/quartz/main.c b/dlls/quartz/main.c index 7828487..93c93a0 100644 --- a/dlls/quartz/main.c +++ b/dlls/quartz/main.c @@ -37,6 +37,8 @@ static DWORD dll_ref = 0; /* For the moment, do nothing here. */ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) { + if (fdwReason == DLL_PROCESS_DETACH) + video_unregister_windowclass(); return QUARTZ_DllMain( hInstDLL, fdwReason, lpv ); }
diff --git a/dlls/quartz/quartz_private.h b/dlls/quartz/quartz_private.h index 3094b1b..4bc9de5 100644 --- a/dlls/quartz/quartz_private.h +++ b/dlls/quartz/quartz_private.h @@ -67,6 +67,7 @@ HRESULT IEnumRegFiltersImpl_Construct(REGFILTER * pInRegFilters, const ULONG siz HRESULT IEnumFiltersImpl_Construct(IBaseFilter ** ppFilters, ULONG nFilters, IEnumFilters ** ppEnum);
extern const char * qzdebugstr_guid(const GUID * id); +extern void video_unregister_windowclass(void) DECLSPEC_HIDDEN;
BOOL CompareMediaTypes(const AM_MEDIA_TYPE * pmt1, const AM_MEDIA_TYPE * pmt2, BOOL bWildcards); void dump_AM_MEDIA_TYPE(const AM_MEDIA_TYPE * pmt); diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c index 31c9ab5..290864b 100644 --- a/dlls/quartz/videorenderer.c +++ b/dlls/quartz/videorenderer.c @@ -164,12 +164,11 @@ static LRESULT CALLBACK VideoWndProcA(HWND hwnd, UINT uMsg, WPARAM wParam, LPARA return 0; }
-static BOOL CreateRenderingWindow(VideoRendererImpl* This) -{ +static BOOL video_register_windowclass(void) { WNDCLASSA winclass; + if (wnd_class_registered) + return 1;
- TRACE("(%p)->()\n", This); - winclass.style = 0; winclass.lpfnWndProc = VideoWndProcA; winclass.cbClsExtra = 0; @@ -180,17 +179,26 @@ static BOOL CreateRenderingWindow(VideoRendererImpl* This) winclass.hbrBackground = GetStockObject(BLACK_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = "Wine ActiveMovie Class"; - - if (!wnd_class_registered) + if (!RegisterClassA(&winclass)) { - if (!RegisterClassA(&winclass)) - { - ERR("Unable to register window %u\n", GetLastError()); - return FALSE; - } - wnd_class_registered = TRUE; + ERR("Unable to register window class: %u\n", GetLastError()); + return FALSE; } + wnd_class_registered = 1; + return 1; +} + +void video_unregister_windowclass(void) { + if (!wnd_class_registered) + return; + UnregisterClassA("Wine ActiveMovie Class", NULL); +}
+static BOOL CreateRenderingWindow(VideoRendererImpl* This) +{ + TRACE("(%p)->()\n", This); + if (!video_register_windowclass()) + return FALSE; This->hWnd = CreateWindowExA(0, "Wine ActiveMovie Class", "Wine ActiveMovie Window", WS_SIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL);