diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index dd23517b7e2..faa2399254d 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -4896,6 +4896,110 @@ static const IProvideMultipleClassInfoVtbl ProvideMultipleClassInfoVtbl = { ProvideMultipleClassInfo_GetInfoOfIndex }; +static inline HTMLElement *impl_from_IElementTraversal(IElementTraversal *iface) +{ + return CONTAINING_RECORD(iface, HTMLElement, IElementTraversal_iface); +} + +static HRESULT WINAPI ElementTraversal_QueryInterface(IElementTraversal *iface, REFIID riid, void **ppv) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + return IHTMLElement_QueryInterface(&This->IHTMLElement_iface, riid, ppv); +} + +static ULONG WINAPI ElementTraversal_AddRef(IElementTraversal *iface) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + + return IHTMLElement_AddRef(&This->IHTMLElement_iface); +} + +static ULONG WINAPI ElementTraversal_Release(IElementTraversal *iface) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + + return IHTMLElement_Release(&This->IHTMLElement_iface); +} + +static HRESULT WINAPI ElementTraversal_GetTypeInfoCount(IElementTraversal *iface, UINT *pctinfo) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + return IDispatchEx_GetTypeInfoCount(&This->node.event_target.dispex.IDispatchEx_iface, pctinfo); +} + +static HRESULT WINAPI ElementTraversal_GetTypeInfo(IElementTraversal *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + return IDispatchEx_GetTypeInfo(&This->node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI ElementTraversal_GetIDsOfNames(IElementTraversal *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + return IDispatchEx_GetIDsOfNames(&This->node.event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames, + lcid, rgDispId); +} + +static HRESULT WINAPI ElementTraversal_Invoke(IElementTraversal *iface, DISPID dispIdMember, REFIID riid, + LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + return IDispatchEx_Invoke(&This->node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid, + wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI ElementTraversal_get_firstElementChild(IElementTraversal *iface, IHTMLElement **p) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ElementTraversal_get_lastElementChild(IElementTraversal *iface, IHTMLElement **p) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ElementTraversal_get_previousElementSibling(IElementTraversal *iface, IHTMLElement **p) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ElementTraversal_get_nextElementSibling(IElementTraversal *iface, IHTMLElement **p) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI ElementTraversal_get_childElementCount(IElementTraversal *iface, LONG *p) +{ + HTMLElement *This = impl_from_IElementTraversal(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static const IElementTraversalVtbl ElementTraversalVtbl = { + ElementTraversal_QueryInterface, + ElementTraversal_AddRef, + ElementTraversal_Release, + ElementTraversal_GetTypeInfoCount, + ElementTraversal_GetTypeInfo, + ElementTraversal_GetIDsOfNames, + ElementTraversal_Invoke, + ElementTraversal_get_firstElementChild, + ElementTraversal_get_lastElementChild, + ElementTraversal_get_previousElementSibling, + ElementTraversal_get_nextElementSibling, + ElementTraversal_get_childElementCount +}; + static inline HTMLElement *impl_from_HTMLDOMNode(HTMLDOMNode *iface) { return CONTAINING_RECORD(iface, HTMLElement, node); @@ -4923,6 +5027,8 @@ HRESULT HTMLElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) *ppv = &This->IHTMLUniqueName_iface; }else if(IsEqualGUID(&IID_IElementSelector, riid)) { *ppv = &This->IElementSelector_iface; + }else if(IsEqualGUID(&IID_IElementTraversal, riid)) { + *ppv = &This->IElementTraversal_iface; }else if(IsEqualGUID(&IID_IConnectionPointContainer, riid)) { *ppv = &This->cp_container.IConnectionPointContainer_iface; }else if(IsEqualGUID(&IID_IProvideClassInfo, riid)) { @@ -5214,6 +5320,7 @@ void HTMLElement_Init(HTMLElement *This, HTMLDocumentNode *doc, nsIDOMHTMLElemen This->IHTMLElement6_iface.lpVtbl = &HTMLElement6Vtbl; This->IHTMLUniqueName_iface.lpVtbl = &HTMLUniqueNameVtbl; This->IElementSelector_iface.lpVtbl = &ElementSelectorVtbl; + This->IElementTraversal_iface.lpVtbl = &ElementTraversalVtbl; This->IProvideMultipleClassInfo_iface.lpVtbl = &ProvideMultipleClassInfoVtbl; if(dispex_data && !dispex_data->vtbl) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index f95adc0822d..fbbd4587892 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -757,6 +757,7 @@ typedef struct { IHTMLElement6 IHTMLElement6_iface; IHTMLUniqueName IHTMLUniqueName_iface; IElementSelector IElementSelector_iface; + IElementTraversal IElementTraversal_iface; IProvideMultipleClassInfo IProvideMultipleClassInfo_iface; nsIDOMHTMLElement *nselem;