static HRESULT WINAPI HTMLSelectElement_add(IHTMLSelectElement *iface, IHTMLElement *element, VARIANT before) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsIWritableVariant *nsvariant; HTMLElement *element_obj; nsresult nsres; TRACE("(%p)->(%p %s)\n", This, element, debugstr_variant(&before)); element_obj = unsafe_impl_from_IHTMLElement(element); if(!element_obj) { FIXME("External IHTMLElement implementation?\n"); return E_INVALIDARG; } nsvariant = create_nsvariant(); if(!nsvariant) return E_FAIL; switch(V_VT(&before)) { case VT_EMPTY: case VT_ERROR: nsres = nsIWritableVariant_SetAsEmpty(nsvariant); break; case VT_I2: nsres = nsIWritableVariant_SetAsInt16(nsvariant, V_I2(&before)); break; default: FIXME("unhandled before %s\n", debugstr_variant(&before)); nsIWritableVariant_Release(nsvariant); return E_NOTIMPL; } if(NS_SUCCEEDED(nsres)) nsres = nsIDOMHTMLSelectElement_Add(This->nsselect, element_obj->nselem, (nsIVariant*)nsvariant); nsIWritableVariant_Release(nsvariant); if(NS_FAILED(nsres)) { ERR("Add failed: %08x\n", nsres); return E_FAIL; } return S_OK; }
static HRESULT WINAPI HTMLElement2_insertAdjacentElement(IHTMLElement2 *iface, BSTR where, IHTMLElement *insertedElement, IHTMLElement **inserted) { HTMLElement *This = impl_from_IHTMLElement2(iface); 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; }