Jacek Caban : shdocvw: Move connection points to DocHost object.
Module: wine Branch: refs/heads/master Commit: 61560b8715127a93fd0a26337e256c4061f3ccf6 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=61560b8715127a93fd0a2633... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Tue Apr 18 00:41:43 2006 +0200 shdocvw: Move connection points to DocHost object. --- dlls/shdocvw/client.c | 6 +++--- dlls/shdocvw/dochost.c | 11 +++++++++-- dlls/shdocvw/events.c | 41 +++++++++++++++++++++++++---------------- dlls/shdocvw/navigate.c | 2 +- dlls/shdocvw/shdocvw.h | 22 ++++++++++++---------- dlls/shdocvw/webbrowser.c | 4 ++-- 6 files changed, 52 insertions(+), 34 deletions(-) diff --git a/dlls/shdocvw/client.c b/dlls/shdocvw/client.c index d6cd7ed..41cc176 100644 --- a/dlls/shdocvw/client.c +++ b/dlls/shdocvw/client.c @@ -475,8 +475,8 @@ void DocHost_ClientSite_Init(DocHost *Th This->view = NULL; } -void WebBrowser_ClientSite_Destroy(WebBrowser *This) +void DocHost_ClientSite_Release(DocHost *This) { - if(This->doc_host.view) - IOleDocumentView_Release(This->doc_host.view); + if(This->view) + IOleDocumentView_Release(This->view); } diff --git a/dlls/shdocvw/dochost.c b/dlls/shdocvw/dochost.c index 5432fc3..9b8da44 100644 --- a/dlls/shdocvw/dochost.c +++ b/dlls/shdocvw/dochost.c @@ -51,8 +51,8 @@ static void navigate_complete(WebBrowser V_VT(&url) = VT_BSTR; V_BSTR(&url) = This->url; - call_sink(This->cp_wbe2, DISPID_NAVIGATECOMPLETE2, &dispparams); - call_sink(This->cp_wbe2, DISPID_DOCUMENTCOMPLETE, &dispparams); + call_sink(This->doc_host.cp_wbe2, DISPID_NAVIGATECOMPLETE2, &dispparams); + call_sink(This->doc_host.cp_wbe2, DISPID_DOCUMENTCOMPLETE, &dispparams); if(disp) IDispatch_Release(disp); @@ -491,4 +491,11 @@ void DocHost_Init(DocHost *This) DocHost_ClientSite_Init(This); DocHost_Frame_Init(This); + DocHost_Events_Init(This); +} + +void DocHost_Release(DocHost *This) +{ + DocHost_ClientSite_Release(This); + DocHost_Events_Release(This); } diff --git a/dlls/shdocvw/events.c b/dlls/shdocvw/events.c index f48f066..e6541f9 100644 --- a/dlls/shdocvw/events.c +++ b/dlls/shdocvw/events.c @@ -30,7 +30,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); struct ConnectionPoint { const IConnectionPointVtbl *lpConnectionPointVtbl; - WebBrowser *webbrowser; + DocHost *doc_host; + IConnectionPointContainer *container; IDispatch **sinks; DWORD sinks_size; @@ -87,13 +88,13 @@ static HRESULT WINAPI ConnectionPointCon if(IsEqualGUID(&DIID_DWebBrowserEvents2, riid)) { TRACE("(%p)->(DIID_DWebBrowserEvents2 %p)\n", This, ppCP); - *ppCP = CONPOINT(This->cp_wbe2); + *ppCP = CONPOINT(This->doc_host.cp_wbe2); }else if(IsEqualGUID(&DIID_DWebBrowserEvents, riid)) { TRACE("(%p)->(DIID_DWebBrowserEvents %p)\n", This, ppCP); - *ppCP = CONPOINT(This->cp_wbe); + *ppCP = CONPOINT(This->doc_host.cp_wbe); }else if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) { TRACE("(%p)->(IID_IPropertyNotifySink %p)\n", This, ppCP); - *ppCP = CONPOINT(This->cp_pns); + *ppCP = CONPOINT(This->doc_host.cp_pns); } if(*ppCP) { @@ -139,7 +140,7 @@ static HRESULT WINAPI ConnectionPoint_Qu } if(*ppv) { - IWebBrowser2_AddRef(WEBBROWSER(This->webbrowser)); + IOleClientSite_AddRef(CLIENTSITE(This->doc_host)); return S_OK; } @@ -150,13 +151,13 @@ static HRESULT WINAPI ConnectionPoint_Qu static ULONG WINAPI ConnectionPoint_AddRef(IConnectionPoint *iface) { ConnectionPoint *This = CONPOINT_THIS(iface); - return IWebBrowser2_AddRef(WEBBROWSER(This->webbrowser)); + return IOleClientSite_AddRef(CLIENTSITE(This->doc_host)); } static ULONG WINAPI ConnectionPoint_Release(IConnectionPoint *iface) { ConnectionPoint *This = CONPOINT_THIS(iface); - return IWebBrowser2_Release(WEBBROWSER(This->webbrowser)); + return IOleClientSite_Release(CLIENTSITE(This->doc_host)); } static HRESULT WINAPI ConnectionPoint_GetConnectionInterface(IConnectionPoint *iface, IID *pIID) @@ -176,8 +177,8 @@ static HRESULT WINAPI ConnectionPoint_Ge TRACE("(%p)->(%p)\n", This, ppCPC); - *ppCPC = CONPTCONT(This->webbrowser); - IConnectionPointContainer_AddRef(CONPTCONT(This->webbrowser)); + *ppCPC = This->container; + IConnectionPointContainer_AddRef(This->container); return S_OK; } @@ -267,15 +268,16 @@ void call_sink(ConnectionPoint *This, DI } } -static void ConnectionPoint_Create(WebBrowser *wb, REFIID riid, ConnectionPoint **cp) +static void ConnectionPoint_Create(DocHost *doc_host, REFIID riid, ConnectionPoint **cp) { ConnectionPoint *ret = HeapAlloc(GetProcessHeap(), 0, sizeof(ConnectionPoint)); ret->lpConnectionPointVtbl = &ConnectionPointVtbl; - ret->webbrowser = wb; + ret->doc_host = doc_host; ret->sinks = NULL; ret->sinks_size = 0; + ret->container = NULL; memcpy(&ret->iid, riid, sizeof(IID)); @@ -295,18 +297,25 @@ static void ConnectionPoint_Destroy(Conn HeapFree(GetProcessHeap(), 0, This); } -void WebBrowser_Events_Init(WebBrowser *This) +void DocHost_Events_Init(DocHost *This) { - This->lpConnectionPointContainerVtbl = &ConnectionPointContainerVtbl; - ConnectionPoint_Create(This, &DIID_DWebBrowserEvents2, &This->cp_wbe2); - ConnectionPoint_Create(This, &DIID_DWebBrowserEvents, &This->cp_wbe); + ConnectionPoint_Create(This, &DIID_DWebBrowserEvents, &This->cp_wbe); ConnectionPoint_Create(This, &IID_IPropertyNotifySink, &This->cp_pns); } -void WebBrowser_Events_Destroy(WebBrowser *This) +void DocHost_Events_Release(DocHost *This) { ConnectionPoint_Destroy(This->cp_wbe2); ConnectionPoint_Destroy(This->cp_wbe); ConnectionPoint_Destroy(This->cp_pns); } + +void WebBrowser_Events_Init(WebBrowser *This) +{ + This->lpConnectionPointContainerVtbl = &ConnectionPointContainerVtbl; + + This->doc_host.cp_wbe2->container = CONPTCONT(This); + This->doc_host.cp_wbe->container = CONPTCONT(This); + This->doc_host.cp_pns->container = CONPTCONT(This); +} diff --git a/dlls/shdocvw/navigate.c b/dlls/shdocvw/navigate.c index 294efcc..0b8445e 100644 --- a/dlls/shdocvw/navigate.c +++ b/dlls/shdocvw/navigate.c @@ -371,7 +371,7 @@ static void on_before_navigate2(WebBrows V_VT(params+6) = (VT_DISPATCH); V_DISPATCH(params+6) = (IDispatch*)WEBBROWSER2(This); - call_sink(This->cp_wbe2, DISPID_BEFORENAVIGATE2, &dispparams); + call_sink(This->doc_host.cp_wbe2, DISPID_BEFORENAVIGATE2, &dispparams); SysFreeString(V_BSTR(&var_url)); if(post_data_len) diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index f719271..28e3a0f 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -73,6 +73,12 @@ typedef struct { HWND hwnd; HWND frame_hwnd; + + /* Connection points */ + + ConnectionPoint *cp_wbe2; + ConnectionPoint *cp_wbe; + ConnectionPoint *cp_pns; } DocHost; typedef struct WebBrowser { @@ -111,12 +117,6 @@ typedef struct WebBrowser { HWND shell_embedding_hwnd; - /* Connection points */ - - ConnectionPoint *cp_wbe2; - ConnectionPoint *cp_wbe; - ConnectionPoint *cp_pns; - DocHost doc_host; } WebBrowser; @@ -153,14 +153,16 @@ void WebBrowser_ClassInfo_Init(WebBrowse void WebBrowser_Events_Init(WebBrowser*); void WebBrowser_HlinkFrame_Init(WebBrowser*); +void WebBrowser_OleObject_Destroy(WebBrowser*); + void DocHost_Init(DocHost*); void DocHost_ClientSite_Init(DocHost*); - +void DocHost_Events_Init(DocHost*); void DocHost_Frame_Init(DocHost*); -void WebBrowser_OleObject_Destroy(WebBrowser*); -void WebBrowser_Events_Destroy(WebBrowser*); -void WebBrowser_ClientSite_Destroy(WebBrowser*); +void DocHost_Release(DocHost*); +void DocHost_ClientSite_Release(DocHost*); +void DocHost_Events_Release(DocHost*); HRESULT WebBrowser_Create(IUnknown*,REFIID,void**); diff --git a/dlls/shdocvw/webbrowser.c b/dlls/shdocvw/webbrowser.c index f1862dd..a29ebed 100644 --- a/dlls/shdocvw/webbrowser.c +++ b/dlls/shdocvw/webbrowser.c @@ -128,9 +128,9 @@ static ULONG WINAPI WebBrowser_Release(I if(This->doc_host.document) IUnknown_Release(This->doc_host.document); + DocHost_Release(&This->doc_host); + WebBrowser_OleObject_Destroy(This); - WebBrowser_Events_Destroy(This); - WebBrowser_ClientSite_Destroy(This); SysFreeString(This->url); HeapFree(GetProcessHeap(), 0, This);
participants (1)
-
Alexandre Julliard