From bf34ca2d035e475d0822e772c50fefa882a27361 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 28 Feb 2007 03:48:07 +0100 Subject: [PATCH] hhctrl.ocx: Fixed releasing web browser object. --- dlls/hhctrl.ocx/webbrowser.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/dlls/hhctrl.ocx/webbrowser.c b/dlls/hhctrl.ocx/webbrowser.c index dbbb41a68dc..e0238b3d4cd 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)