Commit 9ca4f9b6 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

urlmon: Unregister window class on DLL unload.

parent 16acd97e
...@@ -83,14 +83,36 @@ static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM ...@@ -83,14 +83,36 @@ static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
return DefWindowProcW(hwnd, msg, wParam, lParam); return DefWindowProcW(hwnd, msg, wParam, lParam);
} }
static const WCHAR wszURLMonikerNotificationWindow[] =
{'U','R','L',' ','M','o','n','i','k','e','r',' ',
'N','o','t','i','f','i','c','a','t','i','o','n',' ','W','i','n','d','o','w',0};
static ATOM notif_wnd_class;
static BOOL WINAPI register_notif_wnd_class(INIT_ONCE *once, void *param, void **context)
{
static WNDCLASSEXW wndclass = {
sizeof(wndclass), 0, notif_wnd_proc, 0, 0,
NULL, NULL, NULL, NULL, NULL,
wszURLMonikerNotificationWindow, NULL
};
wndclass.hInstance = hProxyDll;
notif_wnd_class = RegisterClassExW(&wndclass);
return TRUE;
}
void unregister_notif_wnd_class(void)
{
if(notif_wnd_class)
UnregisterClassW(MAKEINTRESOURCEW(notif_wnd_class), hProxyDll);
}
HWND get_notif_hwnd(void) HWND get_notif_hwnd(void)
{ {
static ATOM wnd_class = 0;
tls_data_t *tls_data; tls_data_t *tls_data;
static const WCHAR wszURLMonikerNotificationWindow[] = static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT;
{'U','R','L',' ','M','o','n','i','k','e','r',' ',
'N','o','t','i','f','i','c','a','t','i','o','n',' ','W','i','n','d','o','w',0};
tls_data = get_tls_data(); tls_data = get_tls_data();
if(!tls_data) if(!tls_data)
...@@ -101,23 +123,11 @@ HWND get_notif_hwnd(void) ...@@ -101,23 +123,11 @@ HWND get_notif_hwnd(void)
return tls_data->notif_hwnd; return tls_data->notif_hwnd;
} }
if(!wnd_class) { InitOnceExecuteOnce(&init_once, register_notif_wnd_class, NULL, NULL);
static WNDCLASSEXW wndclass = { if(!notif_wnd_class)
sizeof(wndclass), 0, return NULL;
notif_wnd_proc, 0, 0,
NULL, NULL, NULL, NULL, NULL,
wszURLMonikerNotificationWindow,
NULL
};
wndclass.hInstance = hProxyDll;
wnd_class = RegisterClassExW(&wndclass);
if (!wnd_class && GetLastError() == ERROR_CLASS_ALREADY_EXISTS)
wnd_class = 1;
}
tls_data->notif_hwnd = CreateWindowExW(0, wszURLMonikerNotificationWindow, tls_data->notif_hwnd = CreateWindowExW(0, MAKEINTRESOURCEW(notif_wnd_class),
wszURLMonikerNotificationWindow, 0, 0, 0, 0, 0, HWND_MESSAGE, wszURLMonikerNotificationWindow, 0, 0, 0, 0, 0, HWND_MESSAGE,
NULL, hProxyDll, NULL); NULL, hProxyDll, NULL);
if(tls_data->notif_hwnd) if(tls_data->notif_hwnd)
......
...@@ -139,6 +139,7 @@ static void process_detach(void) ...@@ -139,6 +139,7 @@ static void process_detach(void)
free_session(); free_session();
free_tls_list(); free_tls_list();
unregister_notif_wnd_class();
} }
/*********************************************************************** /***********************************************************************
......
...@@ -225,6 +225,7 @@ typedef struct { ...@@ -225,6 +225,7 @@ typedef struct {
tls_data_t *get_tls_data(void) DECLSPEC_HIDDEN; tls_data_t *get_tls_data(void) DECLSPEC_HIDDEN;
void unregister_notif_wnd_class(void) DECLSPEC_HIDDEN;
HWND get_notif_hwnd(void) DECLSPEC_HIDDEN; HWND get_notif_hwnd(void) DECLSPEC_HIDDEN;
void release_notif_hwnd(HWND) DECLSPEC_HIDDEN; void release_notif_hwnd(HWND) DECLSPEC_HIDDEN;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment