Module: wine Branch: master Commit: b52bdff841b3d6654c47a0d72997c24498e5a47d URL: http://source.winehq.org/git/wine.git/?a=commit;h=b52bdff841b3d6654c47a0d729...
Author: Jacek Caban jacek@codeweavers.com Date: Tue May 11 17:57:27 2010 +0200
mshtml: Moved getting select's option element by index to separated function.
---
dlls/mshtml/htmlselect.c | 71 ++++++++++++++++++++++++++++----------------- 1 files changed, 44 insertions(+), 27 deletions(-)
diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index ee5d214..b9be897 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -42,6 +42,43 @@ typedef struct {
#define HTMLSELECT(x) ((IHTMLSelectElement*) &(x)->lpHTMLSelectElementVtbl)
+static HRESULT htmlselect_item(HTMLSelectElement *This, int i, IDispatch **ret) +{ + nsIDOMHTMLOptionsCollection *nscol; + nsIDOMNode *nsnode; + nsresult nsres; + + nsres = nsIDOMHTMLSelectElement_GetOptions(This->nsselect, &nscol); + if(NS_FAILED(nsres)) { + ERR("GetOptions failed: %08x\n", nsres); + return E_FAIL; + } + + nsres = nsIDOMHTMLOptionsCollection_Item(nscol, i, &nsnode); + nsIDOMHTMLOptionsCollection_Release(nscol); + if(NS_FAILED(nsres)) { + ERR("Item failed: %08x\n", nsres); + return E_FAIL; + } + + if(nsnode) { + HTMLDOMNode *node; + + node = get_node(This->element.node.doc, nsnode, TRUE); + nsIDOMNode_Release(nsnode); + if(!node) { + ERR("Could not find node\n"); + return E_FAIL; + } + + IHTMLDOMNode_AddRef(HTMLDOMNODE(node)); + *ret = (IDispatch*)HTMLDOMNODE(node); + }else { + *ret = NULL; + } + return S_OK; +} + #define HTMLSELECT_THIS(iface) DEFINE_THIS(HTMLSelectElement, HTMLSelectElement, iface)
static HRESULT WINAPI HTMLSelectElement_QueryInterface(IHTMLSelectElement *iface, @@ -534,36 +571,16 @@ static HRESULT HTMLSelectElement_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid
switch(flags) { case DISPATCH_PROPERTYGET: { - nsIDOMHTMLOptionsCollection *nscol; - nsIDOMNode *nsnode; - nsresult nsres; - - nsres = nsIDOMHTMLSelectElement_GetOptions(This->nsselect, &nscol); - if(NS_FAILED(nsres)) { - ERR("GetOptions failed: %08x\n", nsres); - return E_FAIL; - } - - nsres = nsIDOMHTMLOptionsCollection_Item(nscol, id-DISPID_OPTIONCOL_0, &nsnode); - nsIDOMHTMLOptionsCollection_Release(nscol); - if(NS_FAILED(nsres)) { - ERR("Item failed: %08x\n", nsres); - return E_FAIL; - } - - if(nsnode) { - HTMLDOMNode *node; + IDispatch *ret; + HRESULT hres;
- node = get_node(This->element.node.doc, nsnode, TRUE); - nsIDOMNode_Release(nsnode); - if(!node) { - ERR("Could not find node\n"); - return E_FAIL; - } + hres = htmlselect_item(This, id-DISPID_OPTIONCOL_0, &ret); + if(FAILED(hres)) + return hres;
- IHTMLDOMNode_AddRef(HTMLDOMNODE(node)); + if(ret) { V_VT(res) = VT_DISPATCH; - V_DISPATCH(res) = (IDispatch*)HTMLDOMNODE(node); + V_DISPATCH(res) = ret; }else { V_VT(res) = VT_NULL; }