Jacek Caban : shdocvw: Moved allocating InternetExplorer object to separated function.

Alexandre Julliard julliard at winehq.org
Mon Jan 10 10:55:17 CST 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jan  7 19:06:39 2011 +0100

shdocvw: Moved allocating InternetExplorer object to separated function.

---

 dlls/shdocvw/iexplore.c |  125 ++++++++++++++++++++++++++---------------------
 1 files changed, 69 insertions(+), 56 deletions(-)

diff --git a/dlls/shdocvw/iexplore.c b/dlls/shdocvw/iexplore.c
index 48fcf97..f0107d6 100644
--- a/dlls/shdocvw/iexplore.c
+++ b/dlls/shdocvw/iexplore.c
@@ -693,50 +693,6 @@ static void create_frame_hwnd(InternetExplorer *This)
             NULL, NULL /* FIXME */, shdocvw_hinstance, This);
 }
 
-static BOOL create_ie_window(LPCSTR cmdline)
-{
-    IWebBrowser2 *wb = NULL;
-
-    InternetExplorer_Create(NULL, &IID_IWebBrowser2, (void**)&wb);
-    if(!wb)
-        return FALSE;
-
-    IWebBrowser2_put_Visible(wb, VARIANT_TRUE);
-    IWebBrowser2_put_MenuBar(wb, VARIANT_TRUE);
-
-    if(!*cmdline) {
-        IWebBrowser2_GoHome(wb);
-    }else {
-        VARIANT var_url;
-        DWORD len;
-        int cmdlen;
-
-        if(!strncasecmp(cmdline, "-nohome", 7))
-            cmdline += 7;
-        while(*cmdline == ' ' || *cmdline == '\t')
-            cmdline++;
-        cmdlen = lstrlenA(cmdline);
-        if(cmdlen > 2 && cmdline[0] == '"' && cmdline[cmdlen-1] == '"') {
-            cmdline++;
-            cmdlen -= 2;
-        }
-
-        V_VT(&var_url) = VT_BSTR;
-
-        len = MultiByteToWideChar(CP_ACP, 0, cmdline, cmdlen, NULL, 0);
-        V_BSTR(&var_url) = SysAllocStringLen(NULL, len);
-        MultiByteToWideChar(CP_ACP, 0, cmdline, cmdlen, V_BSTR(&var_url), len);
-
-        /* navigate to the first page */
-        IWebBrowser2_Navigate2(wb, &var_url, NULL, NULL, NULL, NULL);
-
-        SysFreeString(V_BSTR(&var_url));
-    }
-
-    IWebBrowser2_Release(wb);
-    return TRUE;
-}
-
 static inline IEDocHost *impl_from_DocHost(DocHost *iface)
 {
     return CONTAINING_RECORD(iface, IEDocHost, doc_host);
@@ -799,12 +755,9 @@ static const IDocHostContainerVtbl DocHostContainerVtbl = {
     DocHostContainer_exec
 };
 
-HRESULT InternetExplorer_Create(IUnknown *pOuter, REFIID riid, void **ppv)
+static HRESULT create_ie(InternetExplorer **ret_obj)
 {
     InternetExplorer *ret;
-    HRESULT hres;
-
-    TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
 
     ret = heap_alloc_zero(sizeof(InternetExplorer));
     if(!ret)
@@ -828,12 +781,27 @@ HRESULT InternetExplorer_Create(IUnknown *pOuter, REFIID riid, void **ppv)
     create_frame_hwnd(ret);
     ret->doc_host->doc_host.frame_hwnd = ret->frame_hwnd;
 
+    InterlockedIncrement(&obj_cnt);
+    *ret_obj = ret;
+    return S_OK;
+}
+
+HRESULT InternetExplorer_Create(IUnknown *pOuter, REFIID riid, void **ppv)
+{
+    InternetExplorer *ret;
+    HRESULT hres;
+
+    TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
+
+    hres = create_ie(&ret);
+    if(FAILED(hres))
+        return hres;
+
     hres = IWebBrowser2_QueryInterface(&ret->IWebBrowser2_iface, riid, ppv);
     IWebBrowser2_Release(&ret->IWebBrowser2_iface);
     if(FAILED(hres))
         return hres;
 
-    InterlockedIncrement(&obj_cnt);
     return S_OK;
 }
 
@@ -843,9 +811,54 @@ void released_obj(void)
         PostQuitMessage(0);
 }
 
+static BOOL create_ie_window(LPCSTR cmdline)
+{
+    InternetExplorer *ie;
+    HRESULT hres;
+
+    hres = create_ie(&ie);
+    if(FAILED(hres))
+        return FALSE;
+
+    IWebBrowser2_put_Visible(&ie->IWebBrowser2_iface, VARIANT_TRUE);
+    IWebBrowser2_put_MenuBar(&ie->IWebBrowser2_iface, VARIANT_TRUE);
+
+    if(!*cmdline) {
+        IWebBrowser2_GoHome(&ie->IWebBrowser2_iface);
+    }else {
+        VARIANT var_url;
+        DWORD len;
+        int cmdlen;
+
+        if(!strncasecmp(cmdline, "-nohome", 7))
+            cmdline += 7;
+        while(*cmdline == ' ' || *cmdline == '\t')
+            cmdline++;
+        cmdlen = lstrlenA(cmdline);
+        if(cmdlen > 2 && cmdline[0] == '"' && cmdline[cmdlen-1] == '"') {
+            cmdline++;
+            cmdlen -= 2;
+        }
+
+        V_VT(&var_url) = VT_BSTR;
+
+        len = MultiByteToWideChar(CP_ACP, 0, cmdline, cmdlen, NULL, 0);
+        V_BSTR(&var_url) = SysAllocStringLen(NULL, len);
+        MultiByteToWideChar(CP_ACP, 0, cmdline, cmdlen, V_BSTR(&var_url), len);
+
+        /* navigate to the first page */
+        IWebBrowser2_Navigate2(&ie->IWebBrowser2_iface, &var_url, NULL, NULL, NULL, NULL);
+
+        SysFreeString(V_BSTR(&var_url));
+    }
+
+    IWebBrowser2_Release(&ie->IWebBrowser2_iface);
+    return TRUE;
+}
+
 static ULONG open_dde_url(WCHAR *dde_url)
 {
-    IWebBrowser2 *wb;
+    InternetExplorer *ie;
     WCHAR *url, *url_end;
     VARIANT urlv;
     HRESULT hres;
@@ -869,25 +882,25 @@ static ULONG open_dde_url(WCHAR *dde_url)
             url_end = url + strlenW(url);
     }
 
-    hres = InternetExplorer_Create(NULL, &IID_IWebBrowser2, (void**)&wb);
+    hres = create_ie(&ie);
     if(FAILED(hres))
         return 0;
 
-    IWebBrowser2_put_Visible(wb, VARIANT_TRUE);
-    IWebBrowser2_put_MenuBar(wb, VARIANT_TRUE);
+    IWebBrowser2_put_Visible(&ie->IWebBrowser2_iface, VARIANT_TRUE);
+    IWebBrowser2_put_MenuBar(&ie->IWebBrowser2_iface, VARIANT_TRUE);
 
     V_VT(&urlv) = VT_BSTR;
     V_BSTR(&urlv) = SysAllocStringLen(url, url_end-url);
     if(!V_BSTR(&urlv)) {
-        IWebBrowser2_Release(wb);
+        IWebBrowser2_Release(&ie->IWebBrowser2_iface);
         return 0;
     }
 
-    hres = IWebBrowser2_Navigate2(wb, &urlv, NULL, NULL, NULL, NULL);
+    hres = IWebBrowser2_Navigate2(&ie->IWebBrowser2_iface, &urlv, NULL, NULL, NULL, NULL);
     if(FAILED(hres))
         return 0;
 
-    IWebBrowser2_Release(wb);
+    IWebBrowser2_Release(&ie->IWebBrowser2_iface);
     return DDE_FACK;
 }
 




More information about the wine-cvs mailing list