Module: wine Branch: master Commit: e391872ee061db51fb2cfd85b7b390cbfdc32a14 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e391872ee061db51fb2cfd85b7...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Sep 13 12:52:29 2017 +0200
mshtml: Forward attributes functions from IHTMLElement6 to older interfaces.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/htmlelem.c | 59 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 10 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index ee0c6d5..d2afdf6 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -4036,36 +4036,75 @@ static HRESULT WINAPI HTMLElement6_hasAttributeNS(IHTMLElement6 *iface, VARIANT static HRESULT WINAPI HTMLElement6_getAttribute(IHTMLElement6 *iface, BSTR strAttributeName, VARIANT *AttributeValue) { HTMLElement *This = impl_from_IHTMLElement6(iface); - FIXME("(%p)->(%s %p)\n", This, debugstr_w(strAttributeName), AttributeValue); - return E_NOTIMPL; + + WARN("(%p)->(%s %p) forwarding to IHTMLElement\n", This, debugstr_w(strAttributeName), AttributeValue); + + return IHTMLElement_getAttribute(&This->IHTMLElement_iface, strAttributeName, 0, AttributeValue); }
static HRESULT WINAPI HTMLElement6_setAttribute(IHTMLElement6 *iface, BSTR strAttributeName, VARIANT *pvarAttributeValue) { HTMLElement *This = impl_from_IHTMLElement6(iface); - FIXME("(%p)->(%s %p)\n", This, debugstr_w(strAttributeName), pvarAttributeValue); - return E_NOTIMPL; + + WARN("(%p)->(%s %p) forwarding to IHTMLElement\n", This, debugstr_w(strAttributeName), pvarAttributeValue); + + return IHTMLElement_setAttribute(&This->IHTMLElement_iface, strAttributeName, *pvarAttributeValue, 0); }
static HRESULT WINAPI HTMLElement6_removeAttribute(IHTMLElement6 *iface, BSTR strAttributeName) { HTMLElement *This = impl_from_IHTMLElement6(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(strAttributeName)); - return E_NOTIMPL; + VARIANT_BOOL success; + + WARN("(%p)->(%s) forwarding to IHTMLElement\n", This, debugstr_w(strAttributeName)); + + return IHTMLElement_removeAttribute(&This->IHTMLElement_iface, strAttributeName, 0, &success); }
static HRESULT WINAPI HTMLElement6_getAttributeNode(IHTMLElement6 *iface, BSTR strAttributeName, IHTMLDOMAttribute2 **ppretAttribute) { HTMLElement *This = impl_from_IHTMLElement6(iface); - FIXME("(%p)->(%s %p)\n", This, debugstr_w(strAttributeName), ppretAttribute); - return E_NOTIMPL; + IHTMLDOMAttribute *attr; + HRESULT hres; + + WARN("(%p)->(%s %p) forwarding to IHTMLElement4\n", This, debugstr_w(strAttributeName), ppretAttribute); + + hres = IHTMLElement4_getAttributeNode(&This->IHTMLElement4_iface, strAttributeName, &attr); + if(FAILED(hres)) + return hres; + + if(attr) { + hres = IHTMLDOMAttribute_QueryInterface(attr, &IID_IHTMLDOMAttribute2, (void**)ppretAttribute); + IHTMLDOMAttribute_Release(attr); + }else { + *ppretAttribute = NULL; + } + return hres; }
static HRESULT WINAPI HTMLElement6_setAttributeNode(IHTMLElement6 *iface, IHTMLDOMAttribute2 *pattr, IHTMLDOMAttribute2 **ppretAttribute) { HTMLElement *This = impl_from_IHTMLElement6(iface); - FIXME("(%p)->(%p %p)\n", This, pattr, ppretAttribute); - return E_NOTIMPL; + IHTMLDOMAttribute *attr, *ret_attr; + HRESULT hres; + + WARN("(%p)->(%p %p) forwarding to IHTMLElement4\n", This, pattr, ppretAttribute); + + hres = IHTMLDOMAttribute2_QueryInterface(pattr, &IID_IHTMLDOMAttribute, (void**)&attr); + if(FAILED(hres)) + return hres; + + hres = IHTMLElement4_setAttributeNode(&This->IHTMLElement4_iface, attr, &ret_attr); + if(FAILED(hres)) + return hres; + + if(ret_attr) { + hres = IHTMLDOMAttribute_QueryInterface(ret_attr, &IID_IHTMLDOMAttribute2, (void**)ppretAttribute); + IHTMLDOMAttribute_Release(ret_attr); + }else { + *ppretAttribute = NULL; + } + return hres; }
static HRESULT WINAPI HTMLElement6_removeAttributeNode(IHTMLElement6 *iface, IHTMLDOMAttribute2 *pattr, IHTMLDOMAttribute2 **ppretAttribute)