Jacek Caban : shdocvw: Moved WebBrowser client site realizing to separated function and release more interfaces in SetClientSite .
Alexandre Julliard
julliard at winehq.org
Mon Jan 25 11:21:01 CST 2010
Module: wine
Branch: master
Commit: ff06efd1eb54f4a3f7b2f29e9b2c81f002b8e33f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ff06efd1eb54f4a3f7b2f29e9b2c81f002b8e33f
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Jan 22 17:12:57 2010 +0100
shdocvw: Moved WebBrowser client site realizing to separated function and release more interfaces in SetClientSite.
---
dlls/shdocvw/oleobject.c | 55 +++++++++++++++++++++++++++------------------
1 files changed, 33 insertions(+), 22 deletions(-)
diff --git a/dlls/shdocvw/oleobject.c b/dlls/shdocvw/oleobject.c
index 573e60d..f67edb7 100644
--- a/dlls/shdocvw/oleobject.c
+++ b/dlls/shdocvw/oleobject.c
@@ -255,6 +255,36 @@ static HRESULT on_silent_change(WebBrowser *This)
return S_OK;
}
+static void release_client_site(WebBrowser *This)
+{
+ release_dochost_client(&This->doc_host);
+
+ if(This->shell_embedding_hwnd) {
+ DestroyWindow(This->shell_embedding_hwnd);
+ This->shell_embedding_hwnd = NULL;
+ }
+
+ if(This->inplace) {
+ IOleInPlaceSite_Release(This->inplace);
+ This->inplace = NULL;
+ }
+
+ if(This->container) {
+ IOleContainer_Release(This->container);
+ This->container = NULL;
+ }
+
+ if(This->uiwindow) {
+ IOleInPlaceUIWindow_Release(This->uiwindow);
+ This->uiwindow = NULL;
+ }
+
+ if(This->client) {
+ IOleClientSite_Release(This->client);
+ This->client = NULL;
+ }
+}
+
/**********************************************************************
* Implement the IOleObject interface for the WebBrowser control
*/
@@ -292,22 +322,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE
if(This->client == pClientSite)
return S_OK;
- release_dochost_client(&This->doc_host);
-
- if(This->shell_embedding_hwnd) {
- DestroyWindow(This->shell_embedding_hwnd);
- This->shell_embedding_hwnd = NULL;
- }
-
- if(This->inplace) {
- IOleInPlaceSite_Release(This->inplace);
- This->inplace = NULL;
- }
-
- if(This->client)
- IOleClientSite_Release(This->client);
-
- This->client = pClientSite;
+ release_client_site(This);
if(!pClientSite) {
if(This->doc_host.document)
@@ -316,6 +331,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE
}
IOleClientSite_AddRef(pClientSite);
+ This->client = pClientSite;
hres = IOleClientSite_QueryInterface(This->client, &IID_IDispatch,
(void**)&disp);
@@ -962,10 +978,5 @@ void WebBrowser_OleObject_Init(WebBrowser *This)
void WebBrowser_OleObject_Destroy(WebBrowser *This)
{
- if(This->client)
- IOleObject_SetClientSite(OLEOBJ(This), NULL);
- if(This->container)
- IOleContainer_Release(This->container);
- if(This->uiwindow)
- IOleInPlaceUIWindow_Release(This->uiwindow);
+ release_client_site(This);
}
More information about the wine-cvs
mailing list