Jacek Caban : hhctrl.ocx: Fixed releasing web browser object.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Feb 28 08:19:08 CST 2007


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Feb 28 03:48:07 2007 +0100

hhctrl.ocx: Fixed releasing web browser object.

---

 dlls/hhctrl.ocx/webbrowser.c |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/dlls/hhctrl.ocx/webbrowser.c b/dlls/hhctrl.ocx/webbrowser.c
index dbbb41a..e0238b3 100644
--- a/dlls/hhctrl.ocx/webbrowser.c
+++ b/dlls/hhctrl.ocx/webbrowser.c
@@ -580,7 +580,7 @@ BOOL InitWebBrowser(HHInfo *info, HWND hwndParent)
     if (!iOleClientSiteImpl)
         return FALSE;
 
-    iOleClientSiteImpl->ref = 0;
+    iOleClientSiteImpl->ref = 1;
     iOleClientSiteImpl->lpVtbl = &MyIOleClientSiteTable;
     iOleClientSiteImpl->lpvtblOleInPlaceSite = &MyIOleInPlaceSiteTable;
     iOleClientSiteImpl->lpvtblOleInPlaceFrame = &MyIOleInPlaceFrameTable;
@@ -632,12 +632,7 @@ error:
 
 void ReleaseWebBrowser(HHInfo *info)
 {
-    if (info->wb_object)
-    {
-        IOleObject_Close(info->wb_object, OLECLOSE_NOSAVE);
-        IOleObject_Release(info->wb_object);
-        info->wb_object = NULL;
-    }
+    HRESULT hres;
 
     if (info->web_browser)
     {
@@ -650,6 +645,21 @@ void ReleaseWebBrowser(HHInfo *info)
         IOleClientSite_Release(info->client_site);
         info->client_site = NULL;
     }
+
+    if(info->wb_object) {
+        IOleInPlaceSite *inplace;
+
+        hres = IOleObject_QueryInterface(info->wb_object, &IID_IOleInPlaceSite, (void**)&inplace);
+        if(SUCCEEDED(hres)) {
+            IOleInPlaceSite_OnInPlaceDeactivate(inplace);
+            IOleInPlaceSite_Release(inplace);
+        }
+
+        IOleObject_SetClientSite(info->wb_object, NULL);
+
+        IOleObject_Release(info->wb_object);
+        info->wb_object = NULL;
+    }
 }
 
 void ResizeWebBrowser(HHInfo *info, DWORD dwWidth, DWORD dwHeight)




More information about the wine-cvs mailing list