From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmldoc.c | 131 +++++++++++++++++------------------ dlls/mshtml/mshtml_private.h | 3 +- dlls/mshtml/oleobj.c | 72 +++++++++++++++++++ 3 files changed, 137 insertions(+), 69 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 085b262e313..cce29f6bf20 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -3005,82 +3005,78 @@ static const IHTMLDocument4Vtbl HTMLDocument4Vtbl = { HTMLDocument4_get_URLUnencoded };
-static inline HTMLDocument *impl_from_IHTMLDocument5(IHTMLDocument5 *iface) +static inline HTMLDocumentNode *impl_from_IHTMLDocument5(IHTMLDocument5 *iface) { - return CONTAINING_RECORD(iface, HTMLDocument, IHTMLDocument5_iface); + return CONTAINING_RECORD(iface, HTMLDocumentNode, IHTMLDocument5_iface); }
-static HRESULT WINAPI HTMLDocument5_QueryInterface(IHTMLDocument5 *iface, - REFIID riid, void **ppv) +static HRESULT WINAPI HTMLDocument5_QueryInterface(IHTMLDocument5 *iface, REFIID riid, void **ppv) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); - return htmldoc_query_interface(This, riid, ppv); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); + return htmldoc_query_interface(&This->basedoc, riid, ppv); }
static ULONG WINAPI HTMLDocument5_AddRef(IHTMLDocument5 *iface) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); - return htmldoc_addref(This); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); + return htmldoc_addref(&This->basedoc); }
static ULONG WINAPI HTMLDocument5_Release(IHTMLDocument5 *iface) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); - return htmldoc_release(This); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); + return htmldoc_release(&This->basedoc); }
static HRESULT WINAPI HTMLDocument5_GetTypeInfoCount(IHTMLDocument5 *iface, UINT *pctinfo) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); - return IDispatchEx_GetTypeInfoCount(&This->IDispatchEx_iface, pctinfo); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); + return IDispatchEx_GetTypeInfoCount(&This->basedoc.IDispatchEx_iface, pctinfo); }
-static HRESULT WINAPI HTMLDocument5_GetTypeInfo(IHTMLDocument5 *iface, UINT iTInfo, - LCID lcid, ITypeInfo **ppTInfo) +static HRESULT WINAPI HTMLDocument5_GetTypeInfo(IHTMLDocument5 *iface, UINT iTInfo, LCID lcid, + ITypeInfo **ppTInfo) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); - return IDispatchEx_GetTypeInfo(&This->IDispatchEx_iface, iTInfo, lcid, ppTInfo); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); + return IDispatchEx_GetTypeInfo(&This->basedoc.IDispatchEx_iface, iTInfo, lcid, ppTInfo); }
-static HRESULT WINAPI HTMLDocument5_GetIDsOfNames(IHTMLDocument5 *iface, REFIID riid, - LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +static HRESULT WINAPI HTMLDocument5_GetIDsOfNames(IHTMLDocument5 *iface, REFIID riid, LPOLESTR *rgszNames, + UINT cNames, LCID lcid, DISPID *rgDispId) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); - return IDispatchEx_GetIDsOfNames(&This->IDispatchEx_iface, riid, rgszNames, cNames, lcid, - rgDispId); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); + return IDispatchEx_GetIDsOfNames(&This->basedoc.IDispatchEx_iface, riid, rgszNames, cNames, lcid, rgDispId); }
-static HRESULT WINAPI HTMLDocument5_Invoke(IHTMLDocument5 *iface, DISPID dispIdMember, - REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, - VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +static HRESULT WINAPI HTMLDocument5_Invoke(IHTMLDocument5 *iface, DISPID dispIdMember, REFIID riid, LCID lcid, + WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); - return IDispatchEx_Invoke(&This->IDispatchEx_iface, dispIdMember, riid, lcid, wFlags, + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); + return IDispatchEx_Invoke(&This->basedoc.IDispatchEx_iface, dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); }
static HRESULT WINAPI HTMLDocument5_put_onmousewheel(IHTMLDocument5 *iface, VARIANT v) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface);
TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
- return set_doc_event(This, EVENTID_MOUSEWHEEL, &v); + return set_doc_event(&This->basedoc, EVENTID_MOUSEWHEEL, &v); }
static HRESULT WINAPI HTMLDocument5_get_onmousewheel(IHTMLDocument5 *iface, VARIANT *p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface);
TRACE("(%p)->(%p)\n", This, p);
- return get_doc_event(This, EVENTID_MOUSEWHEEL, p); + return get_doc_event(&This->basedoc, EVENTID_MOUSEWHEEL, p); }
static HRESULT WINAPI HTMLDocument5_get_doctype(IHTMLDocument5 *iface, IHTMLDOMNode **p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); - HTMLDocumentNode *doc_node = This->doc_node; + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); nsIDOMDocumentType *nsdoctype; HTMLDOMNode *doctype_node; nsresult nsres; @@ -3088,12 +3084,12 @@ static HRESULT WINAPI HTMLDocument5_get_doctype(IHTMLDocument5 *iface, IHTMLDOMN
TRACE("(%p)->(%p)\n", This, p);
- if(dispex_compat_mode(&doc_node->node.event_target.dispex) < COMPAT_MODE_IE9) { + if(dispex_compat_mode(&This->node.event_target.dispex) < COMPAT_MODE_IE9) { *p = NULL; return S_OK; }
- nsres = nsIDOMHTMLDocument_GetDoctype(doc_node->nsdoc, &nsdoctype); + nsres = nsIDOMHTMLDocument_GetDoctype(This->nsdoc, &nsdoctype); if(NS_FAILED(nsres)) return map_nsresult(nsres); if(!nsdoctype) { @@ -3111,34 +3107,33 @@ static HRESULT WINAPI HTMLDocument5_get_doctype(IHTMLDocument5 *iface, IHTMLDOMN
static HRESULT WINAPI HTMLDocument5_get_implementation(IHTMLDocument5 *iface, IHTMLDOMImplementation **p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); - HTMLDocumentNode *doc_node = This->doc_node; + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface);
TRACE("(%p)->(%p)\n", This, p);
- if(!doc_node->dom_implementation) { + if(!This->dom_implementation) { HRESULT hres;
- hres = create_dom_implementation(doc_node, &doc_node->dom_implementation); + hres = create_dom_implementation(This, &This->dom_implementation); if(FAILED(hres)) return hres; }
- IHTMLDOMImplementation_AddRef(doc_node->dom_implementation); - *p = doc_node->dom_implementation; + IHTMLDOMImplementation_AddRef(This->dom_implementation); + *p = This->dom_implementation; return S_OK; }
static HRESULT WINAPI HTMLDocument5_createAttribute(IHTMLDocument5 *iface, BSTR bstrattrName, IHTMLDOMAttribute **ppattribute) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); HTMLDOMAttribute *attr; HRESULT hres;
TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrattrName), ppattribute);
- hres = HTMLDOMAttribute_Create(bstrattrName, NULL, 0, dispex_compat_mode(&This->doc_node->node.event_target.dispex), &attr); + hres = HTMLDOMAttribute_Create(bstrattrName, NULL, 0, dispex_compat_mode(&This->node.event_target.dispex), &attr); if(FAILED(hres)) return hres;
@@ -3149,7 +3144,7 @@ static HRESULT WINAPI HTMLDocument5_createAttribute(IHTMLDocument5 *iface, BSTR static HRESULT WINAPI HTMLDocument5_createComment(IHTMLDocument5 *iface, BSTR bstrdata, IHTMLDOMNode **ppRetNode) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); nsIDOMComment *nscomment; HTMLElement *elem; nsAString str; @@ -3158,20 +3153,20 @@ static HRESULT WINAPI HTMLDocument5_createComment(IHTMLDocument5 *iface, BSTR bs
TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrdata), ppRetNode);
- if(!This->doc_node->nsdoc) { + if(!This->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; }
nsAString_InitDepend(&str, bstrdata); - nsres = nsIDOMHTMLDocument_CreateComment(This->doc_node->nsdoc, &str, &nscomment); + nsres = nsIDOMHTMLDocument_CreateComment(This->nsdoc, &str, &nscomment); nsAString_Finish(&str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08lx\n", nsres); return E_FAIL; }
- hres = HTMLCommentElement_Create(This->doc_node, (nsIDOMNode*)nscomment, &elem); + hres = HTMLCommentElement_Create(This, (nsIDOMNode*)nscomment, &elem); nsIDOMComment_Release(nscomment); if(FAILED(hres)) return hres; @@ -3182,103 +3177,103 @@ static HRESULT WINAPI HTMLDocument5_createComment(IHTMLDocument5 *iface, BSTR bs
static HRESULT WINAPI HTMLDocument5_put_onfocusin(IHTMLDocument5 *iface, VARIANT v) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface);
TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
- return set_doc_event(This, EVENTID_FOCUSIN, &v); + return set_doc_event(&This->basedoc, EVENTID_FOCUSIN, &v); }
static HRESULT WINAPI HTMLDocument5_get_onfocusin(IHTMLDocument5 *iface, VARIANT *p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface);
TRACE("(%p)->(%p)\n", This, p);
- return get_doc_event(This, EVENTID_FOCUSIN, p); + return get_doc_event(&This->basedoc, EVENTID_FOCUSIN, p); }
static HRESULT WINAPI HTMLDocument5_put_onfocusout(IHTMLDocument5 *iface, VARIANT v) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface);
TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
- return set_doc_event(This, EVENTID_FOCUSOUT, &v); + return set_doc_event(&This->basedoc, EVENTID_FOCUSOUT, &v); }
static HRESULT WINAPI HTMLDocument5_get_onfocusout(IHTMLDocument5 *iface, VARIANT *p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface);
TRACE("(%p)->(%p)\n", This, p);
- return get_doc_event(This, EVENTID_FOCUSOUT, p); + return get_doc_event(&This->basedoc, EVENTID_FOCUSOUT, p); }
static HRESULT WINAPI HTMLDocument5_put_onactivate(IHTMLDocument5 *iface, VARIANT v) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); return E_NOTIMPL; }
static HRESULT WINAPI HTMLDocument5_get_onactivate(IHTMLDocument5 *iface, VARIANT *p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; }
static HRESULT WINAPI HTMLDocument5_put_ondeactivate(IHTMLDocument5 *iface, VARIANT v) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); return E_NOTIMPL; }
static HRESULT WINAPI HTMLDocument5_get_ondeactivate(IHTMLDocument5 *iface, VARIANT *p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; }
static HRESULT WINAPI HTMLDocument5_put_onbeforeactivate(IHTMLDocument5 *iface, VARIANT v) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); return E_NOTIMPL; }
static HRESULT WINAPI HTMLDocument5_get_onbeforeactivate(IHTMLDocument5 *iface, VARIANT *p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; }
static HRESULT WINAPI HTMLDocument5_put_onbeforedeactivate(IHTMLDocument5 *iface, VARIANT v) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); return E_NOTIMPL; }
static HRESULT WINAPI HTMLDocument5_get_onbeforedeactivate(IHTMLDocument5 *iface, VARIANT *p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface); FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; }
static HRESULT WINAPI HTMLDocument5_get_compatMode(IHTMLDocument5 *iface, BSTR *p) { - HTMLDocument *This = impl_from_IHTMLDocument5(iface); + HTMLDocumentNode *This = impl_from_IHTMLDocument5(iface);
TRACE("(%p)->(%p)\n", This, p);
- *p = SysAllocString(This->doc_node->document_mode <= COMPAT_MODE_IE5 ? L"BackCompat" : L"CSS1Compat"); + *p = SysAllocString(This->document_mode <= COMPAT_MODE_IE5 ? L"BackCompat" : L"CSS1Compat"); return *p ? S_OK : E_OUTOFMEMORY; }
@@ -3681,7 +3676,7 @@ static HRESULT WINAPI HTMLDocument7_createAttribute(IHTMLDocument7 *iface, BSTR
TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrAttrName), ppAttribute);
- return IHTMLDocument5_createAttribute(&This->IHTMLDocument5_iface, bstrAttrName, ppAttribute); + return IHTMLDocument5_createAttribute(&This->doc_node->IHTMLDocument5_iface, bstrAttrName, ppAttribute); }
static HRESULT WINAPI HTMLDocument7_getElementsByClassName(IHTMLDocument7 *iface, BSTR v, IHTMLElementCollection **pel) @@ -5562,8 +5557,6 @@ BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv) *ppv = &This->IDispatchEx_iface; else if(IsEqualGUID(&IID_IDispatchEx, riid)) *ppv = &This->IDispatchEx_iface; - else if(IsEqualGUID(&IID_IHTMLDocument5, riid)) - *ppv = &This->IHTMLDocument5_iface; else if(IsEqualGUID(&IID_IHTMLDocument6, riid)) *ppv = &This->IHTMLDocument6_iface; else if(IsEqualGUID(&IID_IHTMLDocument7, riid)) @@ -5589,7 +5582,6 @@ static const cpc_entry_t HTMLDocumentNode_cpc[] = {
void init_doc(HTMLDocument *doc, IUnknown *outer, IDispatchEx *dispex) { - doc->IHTMLDocument5_iface.lpVtbl = &HTMLDocument5Vtbl; doc->IHTMLDocument6_iface.lpVtbl = &HTMLDocument6Vtbl; doc->IHTMLDocument7_iface.lpVtbl = &HTMLDocument7Vtbl; doc->IDispatchEx_iface.lpVtbl = &DocDispatchExVtbl; @@ -5620,6 +5612,8 @@ static HRESULT HTMLDocumentNode_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) *ppv = &This->IHTMLDocument3_iface; else if(IsEqualGUID(&IID_IHTMLDocument4, riid)) *ppv = &This->IHTMLDocument4_iface; + else if(IsEqualGUID(&IID_IHTMLDocument5, riid)) + *ppv = &This->IHTMLDocument5_iface; else if(IsEqualGUID(&IID_IDocumentSelector, riid)) *ppv = &This->IDocumentSelector_iface; else if(IsEqualGUID(&IID_IDocumentEvent, riid)) @@ -6093,6 +6087,7 @@ static HTMLDocumentNode *alloc_doc_node(HTMLDocumentObj *doc_obj, HTMLInnerWindo doc->IHTMLDocument2_iface.lpVtbl = &HTMLDocumentVtbl; doc->IHTMLDocument3_iface.lpVtbl = &HTMLDocument3Vtbl; doc->IHTMLDocument4_iface.lpVtbl = &HTMLDocument4Vtbl; + doc->IHTMLDocument5_iface.lpVtbl = &HTMLDocument5Vtbl; doc->IDocumentSelector_iface.lpVtbl = &DocumentSelectorVtbl; doc->IDocumentEvent_iface.lpVtbl = &DocumentEventVtbl; doc->ISupportErrorInfo_iface.lpVtbl = &SupportErrorInfoVtbl; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 4014e77338d..3e37f8cfcfe 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -640,7 +640,6 @@ struct ConnectionPoint { };
struct HTMLDocument { - IHTMLDocument5 IHTMLDocument5_iface; IHTMLDocument6 IHTMLDocument6_iface; IHTMLDocument7 IHTMLDocument7_iface; IDispatchEx IDispatchEx_iface; @@ -680,6 +679,7 @@ struct HTMLDocumentObj { IHTMLDocument2 IHTMLDocument2_iface; IHTMLDocument3 IHTMLDocument3_iface; IHTMLDocument4 IHTMLDocument4_iface; + IHTMLDocument5 IHTMLDocument5_iface; IDocumentSelector IDocumentSelector_iface; IDocumentEvent IDocumentEvent_iface; ISupportErrorInfo ISupportErrorInfo_iface; @@ -902,6 +902,7 @@ struct HTMLDocumentNode { IHTMLDocument2 IHTMLDocument2_iface; IHTMLDocument3 IHTMLDocument3_iface; IHTMLDocument4 IHTMLDocument4_iface; + IHTMLDocument5 IHTMLDocument5_iface; IDocumentSelector IDocumentSelector_iface; IDocumentEvent IDocumentEvent_iface; ISupportErrorInfo ISupportErrorInfo_iface; diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c index 1100a8b3ff1..a6e1d60fa55 100644 --- a/dlls/mshtml/oleobj.c +++ b/dlls/mshtml/oleobj.c @@ -2680,6 +2680,75 @@ static const IHTMLDocument4Vtbl DocObjHTMLDocument4Vtbl = { DocObjHTMLDocument4_get_URLUnencoded };
+/********************************************************** + * IHTMLDocument5 implementation + */ +static inline HTMLDocumentObj *impl_from_IHTMLDocument5(IHTMLDocument5 *iface) +{ + return CONTAINING_RECORD(iface, HTMLDocumentObj, IHTMLDocument5_iface); +} + +HTMLDOCUMENTOBJ_IDISPATCH_METHODS(HTMLDocument5) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onmousewheel, VARIANT) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onmousewheel, VARIANT*) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_doctype, IHTMLDOMNode**) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_implementation, IHTMLDOMImplementation**) +HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument5, createAttribute, BSTR,IHTMLDOMAttribute**) +HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument5, createComment, BSTR,IHTMLDOMNode**) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onfocusin, VARIANT) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onfocusin, VARIANT*) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onfocusout, VARIANT) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onfocusout, VARIANT*) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onactivate, VARIANT) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onactivate, VARIANT*) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_ondeactivate, VARIANT) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_ondeactivate, VARIANT*) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onbeforeactivate, VARIANT) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onbeforeactivate, VARIANT*) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onbeforedeactivate, VARIANT) +HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onbeforedeactivate, VARIANT*) + +static HRESULT WINAPI DocObjHTMLDocument5_get_compatMode(IHTMLDocument5 *iface, BSTR *p) +{ + HTMLDocumentObj *This = impl_from_IHTMLDocument5(iface); + + if(This->basedoc.doc_node) + return IHTMLDocument5_get_compatMode(&This->basedoc.doc_node->IHTMLDocument5_iface, p); + + TRACE("(%p)->(%p)\n", This, p); + + return (*p = SysAllocString(L"BackCompat")) ? S_OK : E_OUTOFMEMORY; +} + +static const IHTMLDocument5Vtbl DocObjHTMLDocument5Vtbl = { + DocObjHTMLDocument5_QueryInterface, + DocObjHTMLDocument5_AddRef, + DocObjHTMLDocument5_Release, + DocObjHTMLDocument5_GetTypeInfoCount, + DocObjHTMLDocument5_GetTypeInfo, + DocObjHTMLDocument5_GetIDsOfNames, + DocObjHTMLDocument5_Invoke, + DocObjHTMLDocument5_put_onmousewheel, + DocObjHTMLDocument5_get_onmousewheel, + DocObjHTMLDocument5_get_doctype, + DocObjHTMLDocument5_get_implementation, + DocObjHTMLDocument5_createAttribute, + DocObjHTMLDocument5_createComment, + DocObjHTMLDocument5_put_onfocusin, + DocObjHTMLDocument5_get_onfocusin, + DocObjHTMLDocument5_put_onfocusout, + DocObjHTMLDocument5_get_onfocusout, + DocObjHTMLDocument5_put_onactivate, + DocObjHTMLDocument5_get_onactivate, + DocObjHTMLDocument5_put_ondeactivate, + DocObjHTMLDocument5_get_ondeactivate, + DocObjHTMLDocument5_put_onbeforeactivate, + DocObjHTMLDocument5_get_onbeforeactivate, + DocObjHTMLDocument5_put_onbeforedeactivate, + DocObjHTMLDocument5_get_onbeforedeactivate, + DocObjHTMLDocument5_get_compatMode +}; + /********************************************************** * ISupportErrorInfo implementation */ @@ -2936,6 +3005,8 @@ static HRESULT WINAPI HTMLDocumentObj_QueryInterface(IUnknown *iface, REFIID rii *ppv = &This->IHTMLDocument3_iface; }else if(IsEqualGUID(&IID_IHTMLDocument4, riid)) { *ppv = &This->IHTMLDocument4_iface; + }else if(IsEqualGUID(&IID_IHTMLDocument5, riid)) { + *ppv = &This->IHTMLDocument5_iface; }else if(IsEqualGUID(&IID_ICustomDoc, riid)) { *ppv = &This->ICustomDoc_iface; }else if(IsEqualGUID(&IID_IDocumentSelector, riid)) { @@ -3255,6 +3326,7 @@ static HRESULT create_document_object(BOOL is_mhtml, IUnknown *outer, REFIID rii doc->IHTMLDocument2_iface.lpVtbl = &DocObjHTMLDocument2Vtbl; doc->IHTMLDocument3_iface.lpVtbl = &DocObjHTMLDocument3Vtbl; doc->IHTMLDocument4_iface.lpVtbl = &DocObjHTMLDocument4Vtbl; + doc->IHTMLDocument5_iface.lpVtbl = &DocObjHTMLDocument5Vtbl; doc->IDocumentSelector_iface.lpVtbl = &DocObjDocumentSelectorVtbl; doc->IDocumentEvent_iface.lpVtbl = &DocObjDocumentEventVtbl; doc->ISupportErrorInfo_iface.lpVtbl = &DocObjSupportErrorInfoVtbl;