Jacek Caban : mshtml: Added IHTMLElement2:: insertAdjacentElement implementation.
Alexandre Julliard
julliard at winehq.org
Fri Mar 1 12:42:24 CST 2013
Module: wine
Branch: master
Commit: e03de990ef3fef92ca57dbe89e1d7df00993cd25
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e03de990ef3fef92ca57dbe89e1d7df00993cd25
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Mar 1 15:44:57 2013 +0100
mshtml: Added IHTMLElement2::insertAdjacentElement implementation.
---
dlls/mshtml/htmlelem.c | 8 +++++---
dlls/mshtml/htmlelem2.c | 19 +++++++++++++++++--
dlls/mshtml/mshtml_private.h | 2 ++
3 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 581669c..f0789f8 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -1087,7 +1087,7 @@ static HRESULT WINAPI HTMLElement_get_outerText(IHTMLElement *iface, BSTR *p)
return E_NOTIMPL;
}
-static HRESULT insert_adjacent_node(HTMLElement *This, const WCHAR *where, nsIDOMNode *nsnode)
+HRESULT insert_adjacent_node(HTMLElement *This, const WCHAR *where, nsIDOMNode *nsnode, HTMLDOMNode **ret_node)
{
nsIDOMNode *ret_nsnode;
nsresult nsres;
@@ -1153,6 +1153,8 @@ static HRESULT insert_adjacent_node(HTMLElement *This, const WCHAR *where, nsIDO
if (NS_FAILED(nsres))
return E_FAIL;
+ if(ret_node)
+ hres = get_node(This->node.doc, ret_nsnode, TRUE, ret_node);
nsIDOMNode_Release(ret_nsnode);
return hres;
}
@@ -1194,7 +1196,7 @@ static HRESULT WINAPI HTMLElement_insertAdjacentHTML(IHTMLElement *iface, BSTR w
return E_FAIL;
}
- hr = insert_adjacent_node(This, where, nsnode);
+ hr = insert_adjacent_node(This, where, nsnode, NULL);
nsIDOMNode_Release(nsnode);
return hr;
}
@@ -1226,7 +1228,7 @@ static HRESULT WINAPI HTMLElement_insertAdjacentText(IHTMLElement *iface, BSTR w
return E_FAIL;
}
- hr = insert_adjacent_node(This, where, nsnode);
+ hr = insert_adjacent_node(This, where, nsnode, NULL);
nsIDOMNode_Release(nsnode);
return hr;
diff --git a/dlls/mshtml/htmlelem2.c b/dlls/mshtml/htmlelem2.c
index dc3ad7f..24aaba5 100644
--- a/dlls/mshtml/htmlelem2.c
+++ b/dlls/mshtml/htmlelem2.c
@@ -1120,8 +1120,23 @@ static HRESULT WINAPI HTMLElement2_insertAdjacentElement(IHTMLElement2 *iface, B
IHTMLElement *insertedElement, IHTMLElement **inserted)
{
HTMLElement *This = impl_from_IHTMLElement2(iface);
- FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(where), insertedElement, inserted);
- return E_NOTIMPL;
+ HTMLDOMNode *ret_node;
+ HTMLElement *elem;
+ HRESULT hres;
+
+ TRACE("(%p)->(%s %p %p)\n", This, debugstr_w(where), insertedElement, inserted);
+
+ elem = unsafe_impl_from_IHTMLElement(insertedElement);
+ if(!elem)
+ return E_INVALIDARG;
+
+ hres = insert_adjacent_node(This, where, elem->node.nsnode, &ret_node);
+ if(FAILED(hres))
+ return hres;
+
+ hres = IHTMLDOMNode_QueryInterface(&ret_node->IHTMLDOMNode_iface, &IID_IHTMLElement, (void**)inserted);
+ IHTMLDOMNode_Release(&ret_node->IHTMLDOMNode_iface);
+ return hres;
}
static HRESULT WINAPI HTMLElement2_applyElement(IHTMLElement2 *iface, IHTMLElement *apply,
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index dab68d7..c515e6c 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -831,6 +831,8 @@ void detach_ranges(HTMLDocumentNode*) DECLSPEC_HIDDEN;
HRESULT get_node_text(HTMLDOMNode*,BSTR*) DECLSPEC_HIDDEN;
HRESULT replace_node_by_html(nsIDOMHTMLDocument*,nsIDOMNode*,const WCHAR*) DECLSPEC_HIDDEN;
+HRESULT insert_adjacent_node(HTMLElement*,const WCHAR*,nsIDOMNode*,HTMLDOMNode**) DECLSPEC_HIDDEN;
+
HRESULT create_nselem(HTMLDocumentNode*,const WCHAR*,nsIDOMHTMLElement**) DECLSPEC_HIDDEN;
HRESULT create_element(HTMLDocumentNode*,const WCHAR*,HTMLElement**) DECLSPEC_HIDDEN;
More information about the wine-cvs
mailing list