Jacek Caban : mshtml: Moved getting select' s option element by index to separated function.

Alexandre Julliard julliard at winehq.org
Tue May 11 12:09:40 CDT 2010


Module: wine
Branch: master
Commit: b52bdff841b3d6654c47a0d72997c24498e5a47d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b52bdff841b3d6654c47a0d72997c24498e5a47d

Author: Jacek Caban <jacek at 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;
         }




More information about the wine-cvs mailing list