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