Fix eterbug #993
authorIvan Sinitsin <ivan@etersoft.ru>
Mon, 28 Apr 2008 13:58:17 +0000 (17:58 +0400)
committerKonstantin Kondratyuk <kondratyuk@etersoft.ru>
Mon, 28 Apr 2008 13:58:17 +0000 (17:58 +0400)
dlls/mshtml/htmldoc.c

index 290a7b62c3aee265c21f734197c9fb1fbca1a6fa..b13bc73767149473e20709ae240dfd52448a0a10 100644 (file)
@@ -727,59 +727,33 @@ static HRESULT WINAPI HTMLDocument_get_nameProp(IHTMLDocument2 *iface, BSTR *p)
 
 static HRESULT WINAPI HTMLDocument_write(IHTMLDocument2 *iface, SAFEARRAY *psarray)
 {
-    HTMLDocument *This = HTMLDOC_THIS(iface);
-    nsIDOMDocument *domdoc;
-    nsIDOMHTMLDocument *nsdoc;
-    nsAString nsstr;
-    VARIANT *var;
-    int i;
-    nsresult nsres;
     HRESULT hres;
+    VARIANT *pvar;
+    IHTMLElement *pbody;
+    BSTR vtext;
+    int i;
 
-    TRACE("(%p)->(%p)\n", iface, psarray);
-
-    if(psarray->cDims != 1) {
-        FIXME("cDims=%d\n", psarray->cDims);
-        return E_INVALIDARG;
-    }
-
-    if(!This->nscontainer)
-        return S_OK;
-
-    nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &domdoc);
-    if(NS_FAILED(nsres)) {
-        ERR("GetDocument failed: %08x\n", nsres);
-        return S_OK;
-    }
+    vtext = SysAllocString(L"");
 
-    nsres = nsIDOMDocument_QueryInterface(domdoc, &IID_nsIDOMHTMLDocument, (void**)&nsdoc);
-    nsIDOMDocument_Release(domdoc);
-    if(NS_FAILED(nsres))
-        return S_OK;
+    HTMLDocument_get_body(iface,&pbody);
 
-    hres = SafeArrayAccessData(psarray, (void**)&var);
-    if(FAILED(hres)) {
-        WARN("SafeArrayAccessData failed: %08x\n", hres);
-        nsIDOMHTMLDocument_Release(nsdoc);
-        return hres;
+    hres = IHTMLElement_get_innerHTML(pbody, &vtext);
+    if (FAILED(hres)) {
+        vtext = SysAllocString(L"");
     }
 
-    nsAString_Init(&nsstr, NULL);
-
-    for(i=0; i < psarray->rgsabound[0].cElements; i++) {
-        if(V_VT(var+i) == VT_BSTR) {
-            nsAString_SetData(&nsstr, V_BSTR(var+i));
-            nsres = nsIDOMHTMLDocument_Write(nsdoc, &nsstr);
-            if(NS_FAILED(nsres))
-                ERR("Write failed: %08x\n", nsres);
-        }else {
-            FIXME("vt=%d\n", V_VT(var+i));
+    hres=SafeArrayAccessData(psarray, (void **)&pvar);
+    if (FAILED(hres)) return hres;
+    for (i=0; i < psarray->rgsabound[0].cElements; i++) {
+        hres = VarBstrCat(vtext, V_BSTR(&(pvar[i])), &vtext);
+        if (FAILED(hres)) {
+           break;
         }
     }
 
-    nsAString_Finish(&nsstr);
-    SafeArrayUnaccessData(psarray);
-    nsIDOMHTMLDocument_Release(nsdoc);
+    IHTMLElement_put_innerHTML(pbody,vtext);
+    SysFreeString(vtext);
+    hres = SafeArrayUnaccessData(psarray);
 
     return S_OK;
 }
@@ -795,8 +769,8 @@ static HRESULT WINAPI HTMLDocument_open(IHTMLDocument2 *iface, BSTR url, VARIANT
                         VARIANT features, VARIANT replace, IDispatch **pomWindowResult)
 {
     HTMLDocument *This = HTMLDOC_THIS(iface);
-    FIXME("(%p)->(%s %p)\n", This, debugstr_w(url), pomWindowResult);
-    return E_NOTIMPL;
+    TRACE("(%p)->(%s %p)\n", iface, debugstr_w(url), pomWindowResult);
+    return IHTMLDocument2_QueryInterface(iface, &IID_IDispatch, (void**)pomWindowResult);
 }
 
 static HRESULT WINAPI HTMLDocument_close(IHTMLDocument2 *iface)