Commit ebee2a83 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

mshtml: Added MHTMLDocument object implementation.

parent 51e1a088
MODULE = mshtml.dll MODULE = mshtml.dll
IMPORTLIB = mshtml IMPORTLIB = mshtml
IMPORTS = strmiids uuid urlmon shlwapi shell32 ole32 oleaut32 user32 gdi32 advapi32 IMPORTS = strmiids uuid urlmon shlwapi shell32 ole32 oleaut32 user32 gdi32 advapi32
DELAYIMPORTS = wininet DELAYIMPORTS = wininet inetcomm
C_SRCS = \ C_SRCS = \
conpoint.c \ conpoint.c \
......
...@@ -5075,7 +5075,7 @@ static dispex_static_data_t HTMLDocumentObj_dispex = { ...@@ -5075,7 +5075,7 @@ static dispex_static_data_t HTMLDocumentObj_dispex = {
HTMLDocumentObj_iface_tids HTMLDocumentObj_iface_tids
}; };
HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv) static HRESULT create_document_object(BOOL is_mhtml, IUnknown *outer, REFIID riid, void **ppv)
{ {
mozIDOMWindowProxy *mozwindow; mozIDOMWindowProxy *mozwindow;
HTMLDocumentObj *doc; HTMLDocumentObj *doc;
...@@ -5083,8 +5083,6 @@ HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv) ...@@ -5083,8 +5083,6 @@ HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
nsresult nsres; nsresult nsres;
HRESULT hres; HRESULT hres;
TRACE("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv);
if(outer && !IsEqualGUID(&IID_IUnknown, riid)) { if(outer && !IsEqualGUID(&IID_IUnknown, riid)) {
*ppv = NULL; *ppv = NULL;
return E_INVALIDARG; return E_INVALIDARG;
...@@ -5102,6 +5100,7 @@ HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv) ...@@ -5102,6 +5100,7 @@ HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
init_doc(&doc->basedoc, outer ? outer : &doc->IUnknown_outer, &doc->dispex.IDispatchEx_iface); init_doc(&doc->basedoc, outer ? outer : &doc->IUnknown_outer, &doc->dispex.IDispatchEx_iface);
TargetContainer_Init(doc); TargetContainer_Init(doc);
doc->basedoc.doc_obj = doc; doc->basedoc.doc_obj = doc;
doc->is_mhtml = is_mhtml;
doc->usermode = UNKNOWN_USERMODE; doc->usermode = UNKNOWN_USERMODE;
...@@ -5149,8 +5148,14 @@ HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv) ...@@ -5149,8 +5148,14 @@ HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
return S_OK; return S_OK;
} }
HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
{
TRACE("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv);
return create_document_object(FALSE, outer, riid, ppv);
}
HRESULT MHTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv) HRESULT MHTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
{ {
FIXME("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv); TRACE("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv);
return E_NOTIMPL; return create_document_object(TRUE, outer, riid, ppv);
} }
...@@ -640,6 +640,7 @@ struct HTMLDocumentObj { ...@@ -640,6 +640,7 @@ struct HTMLDocumentObj {
HWND hwnd; HWND hwnd;
HWND tooltips_hwnd; HWND tooltips_hwnd;
BOOL is_mhtml;
BOOL request_uiactivate; BOOL request_uiactivate;
BOOL in_place_active; BOOL in_place_active;
BOOL ui_active; BOOL ui_active;
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "ole2.h" #include "ole2.h"
#include "shlguid.h" #include "shlguid.h"
#include "idispids.h" #include "idispids.h"
#include "mimeole.h"
#define NO_SHLWAPI_REG #define NO_SHLWAPI_REG
#include "shlwapi.h" #include "shlwapi.h"
...@@ -587,6 +588,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva ...@@ -587,6 +588,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
IMoniker *pimkName, LPBC pibc, DWORD grfMode) IMoniker *pimkName, LPBC pibc, DWORD grfMode)
{ {
HTMLDocument *This = impl_from_IPersistMoniker(iface); HTMLDocument *This = impl_from_IPersistMoniker(iface);
IMoniker *mon;
HRESULT hres; HRESULT hres;
TRACE("(%p)->(%x %p %p %08x)\n", This, fFullyAvailable, pimkName, pibc, grfMode); TRACE("(%p)->(%x %p %p %08x)\n", This, fFullyAvailable, pimkName, pibc, grfMode);
...@@ -620,9 +622,22 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva ...@@ -620,9 +622,22 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
} }
} }
prepare_for_binding(This, pimkName, FALSE); if(This->doc_obj->is_mhtml) {
IUnknown *unk;
hres = MimeOleObjectFromMoniker(0, pimkName, pibc, &IID_IUnknown, (void**)&unk, &mon);
if(FAILED(hres))
return hres;
IUnknown_Release(unk);
pibc = NULL;
}else {
IMoniker_AddRef(mon = pimkName);
}
prepare_for_binding(This, mon, FALSE);
call_docview_84(This->doc_obj); call_docview_84(This->doc_obj);
hres = set_moniker(This->window, pimkName, NULL, pibc, NULL, TRUE); hres = set_moniker(This->window, mon, NULL, pibc, NULL, TRUE);
IMoniker_Release(mon);
if(FAILED(hres)) if(FAILED(hres))
return hres; return hres;
......
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