Jacek Caban : mshtml: Added IHTMLDocument2:: get_defaultCharset implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jan 12 12:15:22 CST 2016
Module: wine
Branch: master
Commit: 5910925728d4ad103d42c3d281134db48001ac93
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5910925728d4ad103d42c3d281134db48001ac93
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Jan 12 14:42:46 2016 +0100
mshtml: Added IHTMLDocument2::get_defaultCharset implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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;
More information about the wine-cvs
mailing list