[PATCH] mshtml: Avoid using a global display DC.
Alexandre Julliard
julliard at winehq.org
Fri Jan 26 05:44:50 CST 2018
This is not thread-safe.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/htmlscreen.c | 8 +++++---
dlls/mshtml/main.c | 18 ------------------
dlls/mshtml/mshtml_private.h | 1 -
3 files changed, 5 insertions(+), 22 deletions(-)
diff --git a/dlls/mshtml/htmlscreen.c b/dlls/mshtml/htmlscreen.c
index 2ddaad23185c..5c52e4c43741 100644
--- a/dlls/mshtml/htmlscreen.c
+++ b/dlls/mshtml/htmlscreen.c
@@ -123,10 +123,12 @@ static HRESULT WINAPI HTMLScreen_Invoke(IHTMLScreen *iface, DISPID dispIdMember,
static HRESULT WINAPI HTMLScreen_get_colorDepth(IHTMLScreen *iface, LONG *p)
{
HTMLScreen *This = impl_from_IHTMLScreen(iface);
+ HDC hdc = GetDC(0);
TRACE("(%p)->(%p)\n", This, p);
- *p = GetDeviceCaps(get_display_dc(), BITSPIXEL);
+ *p = GetDeviceCaps(hdc, BITSPIXEL);
+ ReleaseDC(0, hdc);
return S_OK;
}
@@ -150,7 +152,7 @@ static HRESULT WINAPI HTMLScreen_get_width(IHTMLScreen *iface, LONG *p)
TRACE("(%p)->(%p)\n", This, p);
- *p = GetDeviceCaps(get_display_dc(), HORZRES);
+ *p = GetSystemMetrics(SM_CXSCREEN);
return S_OK;
}
@@ -160,7 +162,7 @@ static HRESULT WINAPI HTMLScreen_get_height(IHTMLScreen *iface, LONG *p)
TRACE("(%p)->(%p)\n", This, p);
- *p = GetDeviceCaps(get_display_dc(), VERTRES);
+ *p = GetSystemMetrics(SM_CYSCREEN);
return S_OK;
}
diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c
index af716d16806c..0227cccf3497 100644
--- a/dlls/mshtml/main.c
+++ b/dlls/mshtml/main.c
@@ -51,7 +51,6 @@ HINSTANCE hInst;
DWORD mshtml_tls = TLS_OUT_OF_INDEXES;
static HINSTANCE shdoclc = NULL;
-static HDC display_dc;
static WCHAR *status_strings[IDS_STATUS_LAST-IDS_STATUS_FIRST+1];
static IMultiLanguage2 *mlang;
@@ -140,8 +139,6 @@ static void process_detach(void)
FreeLibrary(shdoclc);
if(mshtml_tls != TLS_OUT_OF_INDEXES)
TlsFree(mshtml_tls);
- if(display_dc)
- DeleteObject(display_dc);
if(mlang)
IMultiLanguage2_Release(mlang);
@@ -210,21 +207,6 @@ HINSTANCE get_shdoclc(void)
return shdoclc = LoadLibraryExW(wszShdoclc, NULL, LOAD_LIBRARY_AS_DATAFILE);
}
-HDC get_display_dc(void)
-{
- static const WCHAR displayW[] = {'D','I','S','P','L','A','Y',0};
-
- if(!display_dc) {
- HDC hdc;
-
- hdc = CreateICW(displayW, NULL, NULL, NULL);
- if(InterlockedCompareExchangePointer((void**)&display_dc, hdc, NULL))
- DeleteObject(hdc);
- }
-
- return display_dc;
-}
-
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID reserved)
{
switch(fdwReason) {
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index aef82cd18b55..51a1addaf269 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -1348,7 +1348,6 @@ extern void *call_thiscall_func;
UINT cp_from_charset_string(BSTR) DECLSPEC_HIDDEN;
BSTR charset_string_from_cp(UINT) DECLSPEC_HIDDEN;
-HDC get_display_dc(void) DECLSPEC_HIDDEN;
HINSTANCE get_shdoclc(void) DECLSPEC_HIDDEN;
void set_statustext(HTMLDocumentObj*,INT,LPCWSTR) DECLSPEC_HIDDEN;
--
2.15.1
More information about the wine-devel
mailing list