Module: wine Branch: master Commit: 3ab9eaf67919d834688ccd21df519ff032f434ec URL: http://source.winehq.org/git/wine.git/?a=commit;h=3ab9eaf67919d834688ccd21df...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Jun 28 11:22:12 2012 +0200
mshtml: Reimplement get_node_obj using vtbl comparison.
---
dlls/mshtml/htmlnode.c | 32 +++++++++----------------------- 1 files changed, 9 insertions(+), 23 deletions(-)
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 46061a6..3951494 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -883,6 +883,15 @@ static const IHTMLDOMNodeVtbl HTMLDOMNodeVtbl = { HTMLDOMNode_get_nextSibling };
+static HTMLDOMNode *get_node_obj(HTMLDocumentNode *This, IUnknown *iface) +{ + IHTMLDOMNode *node; + HRESULT hres; + + hres = IUnknown_QueryInterface(iface, &IID_IHTMLDOMNode, (void**)&node); + return hres == S_OK && node->lpVtbl == &HTMLDOMNodeVtbl ? impl_from_IHTMLDOMNode(node) : NULL; +} + static inline HTMLDOMNode *impl_from_IHTMLDOMNode2(IHTMLDOMNode2 *iface) { return CONTAINING_RECORD(iface, HTMLDOMNode, IHTMLDOMNode2_iface); @@ -1117,29 +1126,6 @@ HRESULT get_node(HTMLDocumentNode *This, nsIDOMNode *nsnode, BOOL create, HTMLDO return create_node(This, nsnode, ret); }
-/* - * FIXME - * We should use better way for getting node object (like private interface) - * or avoid it at all. - */ -static HTMLDOMNode *get_node_obj(HTMLDocumentNode *This, IUnknown *iface) -{ - HTMLDOMNode *iter = This->nodes; - IHTMLDOMNode *node; - - IUnknown_QueryInterface(iface, &IID_IHTMLDOMNode, (void**)&node); - - while(iter) { - if(&iter->IHTMLDOMNode_iface == node) - return iter; - iter = iter->next; - } - - FIXME("Not found %p\n", iface); - IHTMLDOMNode_Release(node); - return NULL; -} - void release_nodes(HTMLDocumentNode *This) { HTMLDOMNode *iter, *next;