Maarten Lankhorst : quartz: Unregister window class after shutdown.

Alexandre Julliard julliard at winehq.org
Mon Nov 29 13:38:42 CST 2010


Module: wine
Branch: master
Commit: d4185badf1731184698857c7ecf271795335629f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d4185badf1731184698857c7ecf271795335629f

Author: Maarten Lankhorst <m.b.lankhorst at 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);




More information about the wine-cvs mailing list