Module: wine Branch: master Commit: 5910925728d4ad103d42c3d281134db48001ac93 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5910925728d4ad103d42c3d281...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Jan 12 14:42:46 2016 +0100
mshtml: Added IHTMLDocument2::get_defaultCharset implementation.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/htmldoc.c | 7 ++++-- dlls/mshtml/main.c | 53 +++++++++++++++++++++++++++++++++----------- dlls/mshtml/mshtml_private.h | 1 + 3 files changed, 46 insertions(+), 15 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 87be653..784a578 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -921,8 +921,11 @@ static HRESULT WINAPI HTMLDocument_put_defaultCharset(IHTMLDocument2 *iface, BST static HRESULT WINAPI HTMLDocument_get_defaultCharset(IHTMLDocument2 *iface, BSTR *p) { HTMLDocument *This = impl_from_IHTMLDocument2(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, p); + + *p = charset_string_from_cp(GetACP()); + return *p ? S_OK : E_OUTOFMEMORY; }
static HRESULT WINAPI HTMLDocument_get_mimeType(IHTMLDocument2 *iface, BSTR *p) diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c index 0b6f6ac..8a366bd 100644 --- a/dlls/mshtml/main.c +++ b/dlls/mshtml/main.c @@ -54,25 +54,35 @@ static HDC display_dc; static WCHAR *status_strings[IDS_STATUS_LAST-IDS_STATUS_FIRST+1]; static IMultiLanguage2 *mlang;
-UINT cp_from_charset_string(BSTR charset) +static BOOL ensure_mlang(void) { - MIMECSETINFO info; + IMultiLanguage2 *new_mlang; HRESULT hres;
- if(!mlang) { - IMultiLanguage2 *new_mlang; - - hres = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, - &IID_IMultiLanguage2, (void**)&new_mlang); - if(FAILED(hres)) { - ERR("Could not create CMultiLanguage instance\n"); - return CP_UTF8; - } + if(mlang) + return TRUE;
- if(InterlockedCompareExchangePointer((void**)&mlang, new_mlang, NULL)) - IMultiLanguage2_Release(new_mlang); + hres = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, + &IID_IMultiLanguage2, (void**)&new_mlang); + if(FAILED(hres)) { + ERR("Could not create CMultiLanguage instance\n"); + return FALSE; }
+ if(InterlockedCompareExchangePointer((void**)&mlang, new_mlang, NULL)) + IMultiLanguage2_Release(new_mlang); + + return TRUE; +} + +UINT cp_from_charset_string(BSTR charset) +{ + MIMECSETINFO info; + HRESULT hres; + + if(!ensure_mlang()) + return CP_UTF8; + hres = IMultiLanguage2_GetCharsetInfo(mlang, charset, &info); if(FAILED(hres)) { FIXME("GetCharsetInfo failed: %08x\n", hres); @@ -82,6 +92,23 @@ UINT cp_from_charset_string(BSTR charset) return info.uiInternetEncoding; }
+BSTR charset_string_from_cp(UINT cp) +{ + MIMECPINFO info; + HRESULT hres; + + if(!ensure_mlang()) + return SysAllocString(NULL); + + hres = IMultiLanguage2_GetCodePageInfo(mlang, cp, GetUserDefaultUILanguage(), &info); + if(FAILED(hres)) { + ERR("GetCodePageInfo failed: %08x\n", hres); + return SysAllocString(NULL); + } + + return SysAllocString(info.wszWebCharset); +} + static void thread_detach(void) { thread_data_t *thread_data; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 2f03501..f57dff2 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1271,6 +1271,7 @@ static inline void windowref_release(windowref_t *ref) }
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;