Jacek Caban : shdocvw: Move connection points to DocHost object.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Apr 18 05:13:52 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 61560b8715127a93fd0a26337e256c4061f3ccf6
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=61560b8715127a93fd0a26337e256c4061f3ccf6

Author: Jacek Caban <jacek at 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);




More information about the wine-cvs mailing list