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