static BindStatusCallback *create_callback(DocHost *doc_host, LPCWSTR url, PBYTE post_data, ULONG post_data_len, LPCWSTR headers) { BindStatusCallback *ret = heap_alloc(sizeof(BindStatusCallback)); ret->IBindStatusCallback_iface.lpVtbl = &BindStatusCallbackVtbl; ret->IHttpNegotiate_iface.lpVtbl = &HttpNegotiateVtbl; ret->IHttpSecurity_iface.lpVtbl = &HttpSecurityVtbl; ret->ref = 1; ret->url = SysAllocString(url); ret->post_data = NULL; ret->post_data_len = post_data_len; ret->headers = headers ? SysAllocString(headers) : NULL; ret->doc_host = doc_host; IOleClientSite_AddRef(&doc_host->IOleClientSite_iface); ret->binding = NULL; if(post_data) { ret->post_data = GlobalAlloc(0, post_data_len); memcpy(ret->post_data, post_data, post_data_len); } return ret; }
static HRESULT WINAPI OleObject_Close(IOleObject *iface, DWORD dwSaveOption) { WebBrowser *This = impl_from_IOleObject(iface); IOleClientSite *client; HRESULT hres; TRACE("(%p)->(%d)\n", This, dwSaveOption); if(dwSaveOption != OLECLOSE_NOSAVE) { FIXME("unimplemented flag: %x\n", dwSaveOption); return E_NOTIMPL; } if(This->doc_host.frame) IOleInPlaceFrame_SetActiveObject(This->doc_host.frame, NULL, NULL); if(This->uiwindow) IOleInPlaceUIWindow_SetActiveObject(This->uiwindow, NULL, NULL); if(This->inplace) IOleInPlaceSiteEx_OnUIDeactivate(This->inplace, FALSE); notify_on_focus(This, FALSE); if(This->inplace) IOleInPlaceSiteEx_OnInPlaceDeactivate(This->inplace); /* store old client site - we need to restore it in DoVerb */ client = This->client; if(This->client) IOleClientSite_AddRef(This->client); hres = IOleObject_SetClientSite(iface, NULL); This->client_closed = client; return hres; }
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite) { WindowsMediaPlayer *This = impl_from_IOleObject(iface); IOleControlSite *control_site; HRESULT hres; TRACE("(%p)->(%p)\n", This, pClientSite); release_client_site(This); if(!pClientSite) return S_OK; IOleClientSite_AddRef(pClientSite); This->client_site = pClientSite; hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleControlSite, (void**)&control_site); if(SUCCEEDED(hres)) { IDispatch *disp; hres = IOleControlSite_GetExtendedControl(control_site, &disp); if(SUCCEEDED(hres) && disp) { FIXME("Use extended control\n"); IDispatch_Release(disp); } IOleControlSite_Release(control_site); } return S_OK; }
static ULONG WINAPI NewWindowManager_AddRef(INewWindowManager *iface) { NewWindowManager *This = impl_from_INewWindowManager(iface); TRACE("(%p)\n", This); return IOleClientSite_AddRef(&This->doc_host->IOleClientSite_iface); }
void ME_CopyReObject(REOBJECT* dst, const REOBJECT* src) { *dst = *src; if (dst->poleobj) IOleObject_AddRef(dst->poleobj); if (dst->pstg) IStorage_AddRef(dst->pstg); if (dst->polesite) IOleClientSite_AddRef(dst->polesite); }
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE pClientSite) { WebBrowser *This = impl_from_IOleObject(iface); IDocHostUIHandler *hostui; IOleContainer *container; IDispatch *disp; HRESULT hres; TRACE("(%p)->(%p)\n", This, pClientSite); if(This->client == pClientSite) return S_OK; release_client_site(This); if(!pClientSite) { if(This->doc_host.document) deactivate_document(&This->doc_host); return S_OK; } IOleClientSite_AddRef(pClientSite); This->client = pClientSite; hres = IOleClientSite_QueryInterface(This->client, &IID_IDispatch, (void**)&disp); if(SUCCEEDED(hres)) This->doc_host.client_disp = disp; hres = IOleClientSite_QueryInterface(This->client, &IID_IDocHostUIHandler, (void**)&hostui); if(SUCCEEDED(hres)) This->doc_host.hostui = hostui; hres = IOleClientSite_GetContainer(This->client, &container); if(SUCCEEDED(hres)) { ITargetContainer *target_container; hres = IOleContainer_QueryInterface(container, &IID_ITargetContainer, (void**)&target_container); if(SUCCEEDED(hres)) { FIXME("Unsupported ITargetContainer\n"); ITargetContainer_Release(target_container); } IOleContainer_Release(container); } create_shell_embedding_hwnd(This); on_offlineconnected_change(This); on_silent_change(This); return S_OK; }
static HRESULT WINAPI OleClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **obj) { if (IsEqualIID(riid, &IID_IOleClientSite) || IsEqualIID(riid, &IID_IUnknown)) { *obj = iface; IOleClientSite_AddRef(iface); return S_OK; } *obj = NULL; return E_NOINTERFACE; }
static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv) { DocHost *This = impl_from_IOleClientSite(iface); if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = &This->IOleClientSite_iface; }else if(IsEqualGUID(&IID_IOleClientSite, riid)) { TRACE("(%p)->(IID_IOleClientSite %p)\n", This, ppv); *ppv = &This->IOleClientSite_iface; }else if(IsEqualGUID(&IID_IOleWindow, riid)) { TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv); *ppv = &This->IOleInPlaceSiteEx_iface; }else if(IsEqualGUID(&IID_IOleInPlaceSite, riid)) { TRACE("(%p)->(IID_IOleInPlaceSite %p)\n", This, ppv); *ppv = &This->IOleInPlaceSiteEx_iface; }else if(IsEqualGUID(&IID_IOleInPlaceSiteEx, riid)) { TRACE("(%p)->(IID_IOleInPlaceSiteEx %p)\n", This, ppv); *ppv = &This->IOleInPlaceSiteEx_iface; }else if(IsEqualGUID(&IID_IDocHostUIHandler, riid)) { TRACE("(%p)->(IID_IDocHostUIHandler %p)\n", This, ppv); *ppv = &This->IDocHostUIHandler2_iface; }else if(IsEqualGUID(&IID_IDocHostUIHandler2, riid)) { TRACE("(%p)->(IID_IDocHostUIHandler2 %p)\n", This, ppv); *ppv = &This->IDocHostUIHandler2_iface; }else if(IsEqualGUID(&IID_IOleDocumentSite, riid)) { TRACE("(%p)->(IID_IOleDocumentSite %p)\n", This, ppv); *ppv = &This->IOleDocumentSite_iface; }else if(IsEqualGUID(&IID_IOleControlSite, riid)) { TRACE("(%p)->(IID_IOleControlSite %p)\n", This, ppv); *ppv = &This->IOleControlSite_iface; }else if(IsEqualGUID(&IID_IOleCommandTarget, riid)) { TRACE("(%p)->(IID_IOleCommandTarget %p)\n", This, ppv); *ppv = &This->IOleCommandTarget_iface; }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); *ppv = &This->IDispatch_iface; }else if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) { TRACE("(%p)->(IID_IPropertyNotifySink %p)\n", This, ppv); *ppv = &This->IPropertyNotifySink_iface; }else if(IsEqualGUID(&IID_IServiceProvider, riid)) { TRACE("(%p)->(IID_IServiceProvider %p)\n", This, ppv); *ppv = &This->IServiceProvider_iface; }else { *ppv = NULL; WARN("Unsupported interface %s\n", debugstr_guid(riid)); return E_NOINTERFACE; } IOleClientSite_AddRef((IUnknown*)*ppv); return S_OK; }
static HRESULT WINAPI IRichEditOle_fnGetClientSite(IRichEditOle *me, LPOLECLIENTSITE *lplpolesite) { IRichEditOleImpl *This = impl_from_IRichEditOle(me); TRACE("%p,%p\n",This, lplpolesite); if(!lplpolesite) return E_INVALIDARG; *lplpolesite = &This->clientSite->IOleClientSite_iface; IOleClientSite_AddRef(*lplpolesite); return S_OK; }
static HRESULT WINAPI OleObject_GetClientSite(IOleObject *iface, LPOLECLIENTSITE *ppClientSite) { WebBrowser *This = impl_from_IOleObject(iface); TRACE("(%p)->(%p)\n", This, ppClientSite); if(!ppClientSite) return E_INVALIDARG; if(This->client) IOleClientSite_AddRef(This->client); *ppClientSite = This->client; return S_OK; }
static HRESULT WINAPI OleObject_GetClientSite(IOleObject *iface, IOleClientSite **ppClientSite) { HTMLDocument *This = impl_from_IOleObject(iface); TRACE("(%p)->(%p)\n", This, ppClientSite); if(!ppClientSite) return E_INVALIDARG; if(This->doc_obj->client) IOleClientSite_AddRef(This->doc_obj->client); *ppClientSite = This->doc_obj->client; return S_OK; }
static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv) { DocHost *This = CLIENTSITE_THIS(iface); *ppv = NULL; if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = CLIENTSITE(This); }else if(IsEqualGUID(&IID_IOleClientSite, riid)) { TRACE("(%p)->(IID_IOleClientSite %p)\n", This, ppv); *ppv = CLIENTSITE(This); }else if(IsEqualGUID(&IID_IOleWindow, riid)) { TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv); *ppv = INPLACESITE(This); }else if(IsEqualGUID(&IID_IOleInPlaceSite, riid)) { TRACE("(%p)->(IID_IOleInPlaceSite %p)\n", This, ppv); *ppv = INPLACESITE(This); }else if(IsEqualGUID(&IID_IDocHostUIHandler, riid)) { TRACE("(%p)->(IID_IDocHostUIHandler %p)\n", This, ppv); *ppv = DOCHOSTUI(This); }else if(IsEqualGUID(&IID_IDocHostUIHandler2, riid)) { TRACE("(%p)->(IID_IDocHostUIHandler2 %p)\n", This, ppv); *ppv = DOCHOSTUI2(This); }else if(IsEqualGUID(&IID_IOleDocumentSite, riid)) { TRACE("(%p)->(IID_IOleDocumentSite %p)\n", This, ppv); *ppv = DOCSITE(This); }else if(IsEqualGUID(&IID_IOleCommandTarget, riid)) { TRACE("(%p)->(IID_IOleCommandTarget %p)\n", This, ppv); *ppv = OLECMD(This); }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); *ppv = CLDISP(This); }else if(IsEqualGUID(&IID_IServiceProvider, riid)) { TRACE("(%p)->(IID_IServiceProvider %p)\n", This, ppv); *ppv = SERVPROV(This); } if(*ppv) { IOleClientSite_AddRef(CLIENTSITE(This)); return S_OK; } WARN("Unsupported intrface %s\n", debugstr_guid(riid)); return E_NOINTERFACE; }
static HRESULT WINAPI IOleClientSite_fnQueryInterface(IOleClientSite *me, REFIID riid, LPVOID *ppvObj) { TRACE("%p %s\n", me, debugstr_guid(riid) ); *ppvObj = NULL; if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IOleClientSite)) *ppvObj = me; if (*ppvObj) { IOleClientSite_AddRef(me); return S_OK; } FIXME("%p: unhandled interface %s\n", me, debugstr_guid(riid) ); return E_NOINTERFACE; }
static HRESULT WINAPI OleClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv) { IOCS *This = impl_from_IOleClientSite(iface); TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); *ppv = NULL; if (IsEqualIID(&IID_IUnknown, riid) || IsEqualIID(&IID_IOleClientSite, riid)) { *ppv = iface; } else if (IsEqualIID(&IID_IOleContainer, riid)) { *ppv = &This->IOleContainer_iface; } else if (IsEqualIID(&IID_IOleInPlaceSite, riid) || IsEqualIID(&IID_IOleInPlaceSiteEx, riid) || IsEqualIID(&IID_IOleInPlaceSiteWindowless, riid)) { *ppv = &This->IOleInPlaceSiteWindowless_iface; } else if (IsEqualIID(&IID_IOleInPlaceFrame, riid)) { *ppv = &This->IOleInPlaceFrame_iface; } else if (IsEqualIID(&IID_IOleControlSite, riid)) { *ppv = &This->IOleControlSite_iface; } if (*ppv) { IOleClientSite_AddRef(iface); return S_OK; } WARN("unsupported interface %s\n", debugstr_guid(riid)); return E_NOINTERFACE; }
static BindStatusCallback *create_callback(DocHost *doc_host, LPCWSTR url, PBYTE post_data, ULONG post_data_len, LPCWSTR headers) { BindStatusCallback *ret = heap_alloc(sizeof(BindStatusCallback)); ret->lpBindStatusCallbackVtbl = &BindStatusCallbackVtbl; ret->lpHttpNegotiateVtbl = &HttpNegotiateVtbl; ret->ref = 1; ret->url = heap_strdupW(url); ret->post_data = NULL; ret->post_data_len = post_data_len; ret->headers = headers ? SysAllocString(headers) : NULL; ret->doc_host = doc_host; IOleClientSite_AddRef(CLIENTSITE(doc_host)); if(post_data) { ret->post_data = GlobalAlloc(0, post_data_len); memcpy(ret->post_data, post_data, post_data_len); } return ret; }
static ULONG WINAPI ClDispatch_AddRef(IDispatch *iface) { DocHost *This = impl_from_IDispatch(iface); return IOleClientSite_AddRef(&This->IOleClientSite_iface); }
static ULONG WINAPI DocHostUIHandler_AddRef(IDocHostUIHandler2 *iface) { DocHost *This = impl_from_IDocHostUIHandler2(iface); return IOleClientSite_AddRef(&This->IOleClientSite_iface); }
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite) { HTMLDocument *This = impl_from_IOleObject(iface); IOleCommandTarget *cmdtrg = NULL; IOleWindow *ole_window; IBrowserService *browser_service; BOOL hostui_setup; VARIANT silent; HWND hwnd; HRESULT hres; TRACE("(%p)->(%p)\n", This, pClientSite); if(pClientSite == This->doc_obj->client) return S_OK; if(This->doc_obj->client) { IOleClientSite_Release(This->doc_obj->client); This->doc_obj->client = NULL; This->doc_obj->usermode = UNKNOWN_USERMODE; } if(This->doc_obj->client_cmdtrg) { IOleCommandTarget_Release(This->doc_obj->client_cmdtrg); This->doc_obj->client_cmdtrg = NULL; } if(This->doc_obj->hostui && !This->doc_obj->custom_hostui) { IDocHostUIHandler_Release(This->doc_obj->hostui); This->doc_obj->hostui = NULL; } if(This->doc_obj->doc_object_service) { IDocObjectService_Release(This->doc_obj->doc_object_service); This->doc_obj->doc_object_service = NULL; } if(This->doc_obj->webbrowser) { IUnknown_Release(This->doc_obj->webbrowser); This->doc_obj->webbrowser = NULL; } if(This->doc_obj->browser_service) { IUnknown_Release(This->doc_obj->browser_service); This->doc_obj->browser_service = NULL; } if(This->doc_obj->travel_log) { ITravelLog_Release(This->doc_obj->travel_log); This->doc_obj->travel_log = NULL; } memset(&This->doc_obj->hostinfo, 0, sizeof(DOCHOSTUIINFO)); if(!pClientSite) return S_OK; IOleClientSite_AddRef(pClientSite); This->doc_obj->client = pClientSite; hostui_setup = This->doc_obj->hostui_setup; if(!This->doc_obj->hostui) { IDocHostUIHandler *uihandler; This->doc_obj->custom_hostui = FALSE; hres = IOleClientSite_QueryInterface(pClientSite, &IID_IDocHostUIHandler, (void**)&uihandler); if(SUCCEEDED(hres)) This->doc_obj->hostui = uihandler; } if(This->doc_obj->hostui) { DOCHOSTUIINFO hostinfo; LPOLESTR key_path = NULL, override_key_path = NULL; IDocHostUIHandler2 *uihandler2; memset(&hostinfo, 0, sizeof(DOCHOSTUIINFO)); hostinfo.cbSize = sizeof(DOCHOSTUIINFO); hres = IDocHostUIHandler_GetHostInfo(This->doc_obj->hostui, &hostinfo); if(SUCCEEDED(hres)) { TRACE("hostinfo = {%u %08x %08x %s %s}\n", hostinfo.cbSize, hostinfo.dwFlags, hostinfo.dwDoubleClick, debugstr_w(hostinfo.pchHostCss), debugstr_w(hostinfo.pchHostNS)); update_hostinfo(This->doc_obj, &hostinfo); This->doc_obj->hostinfo = hostinfo; } if(!hostui_setup) { hres = IDocHostUIHandler_GetOptionKeyPath(This->doc_obj->hostui, &key_path, 0); if(hres == S_OK && key_path) { if(key_path[0]) { /* FIXME: use key_path */ FIXME("key_path = %s\n", debugstr_w(key_path)); } CoTaskMemFree(key_path); } hres = IDocHostUIHandler_QueryInterface(This->doc_obj->hostui, &IID_IDocHostUIHandler2, (void**)&uihandler2); if(SUCCEEDED(hres)) { hres = IDocHostUIHandler2_GetOverrideKeyPath(uihandler2, &override_key_path, 0); if(hres == S_OK && override_key_path) { if(override_key_path[0]) { /*FIXME: use override_key_path */ FIXME("override_key_path = %s\n", debugstr_w(override_key_path)); } CoTaskMemFree(override_key_path); } IDocHostUIHandler2_Release(uihandler2); } This->doc_obj->hostui_setup = TRUE; } } load_settings(This->doc_obj); /* Native calls here GetWindow. What is it for? * We don't have anything to do with it here (yet). */ hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleWindow, (void**)&ole_window); if(SUCCEEDED(hres)) { IOleWindow_GetWindow(ole_window, &hwnd); IOleWindow_Release(ole_window); } hres = do_query_service((IUnknown*)pClientSite, &IID_IShellBrowser, &IID_IBrowserService, (void**)&browser_service); if(SUCCEEDED(hres)) { ITravelLog *travel_log; This->doc_obj->browser_service = (IUnknown*)browser_service; hres = IBrowserService_GetTravelLog(browser_service, &travel_log); if(SUCCEEDED(hres)) This->doc_obj->travel_log = travel_log; }else { browser_service = NULL; } hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleCommandTarget, (void**)&cmdtrg); if(SUCCEEDED(hres)) { VARIANT var; OLECMD cmd = {OLECMDID_SETPROGRESSTEXT, 0}; This->doc_obj->client_cmdtrg = cmdtrg; if(!hostui_setup) { IDocObjectService *doc_object_service; IWebBrowser2 *wb; set_document_navigation(This->doc_obj, TRUE); if(browser_service) { hres = IBrowserService_QueryInterface(browser_service, &IID_IDocObjectService, (void**)&doc_object_service); if(SUCCEEDED(hres)) { This->doc_obj->doc_object_service = doc_object_service; /* * Some embedding routines, esp. in regards to use of IDocObjectService, differ if * embedder supports IWebBrowserApp. */ hres = do_query_service((IUnknown*)pClientSite, &IID_IWebBrowserApp, &IID_IWebBrowser2, (void**)&wb); if(SUCCEEDED(hres)) This->doc_obj->webbrowser = (IUnknown*)wb; } } } call_docview_84(This->doc_obj); IOleCommandTarget_QueryStatus(cmdtrg, NULL, 1, &cmd, NULL); V_VT(&var) = VT_I4; V_I4(&var) = 0; IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSMAX, OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL); IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSPOS, OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL); } if(This->doc_obj->usermode == UNKNOWN_USERMODE) IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_USERMODE); IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED); hres = get_client_disp_property(This->doc_obj->client, DISPID_AMBIENT_SILENT, &silent); if(SUCCEEDED(hres)) { if(V_VT(&silent) != VT_BOOL) WARN("silent = %s\n", debugstr_variant(&silent)); else if(V_BOOL(&silent)) FIXME("silent == true\n"); } IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_USERAGENT); IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_PALETTE); return S_OK; }
static ULONG WINAPI PropertyNotifySink_AddRef(IPropertyNotifySink *iface) { DocHost *This = impl_from_IPropertyNotifySink(iface); return IOleClientSite_AddRef(&This->IOleClientSite_iface); }
static ULONG WINAPI ClServiceProvider_AddRef(IServiceProvider *iface) { DocHost *This = impl_from_IServiceProvider(iface); return IOleClientSite_AddRef(&This->IOleClientSite_iface); }
static ULONG WINAPI InPlaceFrame_AddRef(IOleInPlaceFrame *iface) { DocHost *This = impl_from_IOleInPlaceFrame(iface); return IOleClientSite_AddRef(&This->IOleClientSite_iface); }
static ULONG STDMETHODCALLTYPE Frame_AddRef(IOleInPlaceFrame *iface) { WebBrowserContainer *This = impl_from_IOleInPlaceFrame(iface); return IOleClientSite_AddRef(&This->IOleClientSite_iface); }
static ULONG STDMETHODCALLTYPE UI_AddRef(IDocHostUIHandler *iface) { WebBrowserContainer *This = impl_from_IDocHostUIHandler(iface); return IOleClientSite_AddRef(&This->IOleClientSite_iface); }
static ULONG WINAPI ClOleCommandTarget_AddRef(IOleCommandTarget *iface) { DocHost *This = impl_from_IOleCommandTarget(iface); return IOleClientSite_AddRef(&This->IOleClientSite_iface); }
static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSite *iface) { DocHost *This = INPLACESITE_THIS(iface); return IOleClientSite_AddRef(CLIENTSITE(This)); }
static ULONG WINAPI OleDocumentSite_AddRef(IOleDocumentSite *iface) { DocHost *This = DOCSITE_THIS(iface); return IOleClientSite_AddRef(CLIENTSITE(This)); }
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE pClientSite) { WebBrowser *This = OLEOBJ_THIS(iface); IOleContainer *container; HRESULT hres; TRACE("(%p)->(%p)\n", This, pClientSite); if(This->client == pClientSite) return S_OK; if(This->doc_host.hwnd) { DestroyWindow(This->doc_host.hwnd); This->doc_host.hwnd = NULL; } 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->doc_host.hostui) IDocHostUIHandler_Release(This->doc_host.hostui); if(This->client) IOleClientSite_Release(This->client); if(!pClientSite) { if(This->doc_host.document) deactivate_document(&This->doc_host); This->client = NULL; return S_OK; } This->client = pClientSite; IOleClientSite_AddRef(pClientSite); hres = IOleClientSite_QueryInterface(This->client, &IID_IDocHostUIHandler, (void**)&This->doc_host.hostui); if(FAILED(hres)) This->doc_host.hostui = NULL; hres = IOleClientSite_GetContainer(This->client, &container); if(SUCCEEDED(hres)) { ITargetContainer *target_container; hres = IOleContainer_QueryInterface(container, &IID_ITargetContainer, (void**)&target_container); if(SUCCEEDED(hres)) { FIXME("Unsupported ITargetContainer\n"); ITargetContainer_Release(target_container); } IOleContainer_Release(container); } create_shell_embedding_hwnd(This); return S_OK; }
static HRESULT WINAPI OleDocumentView_UIActivate(IOleDocumentView *iface, BOOL fUIActivate) { HTMLDocument *This = DOCVIEW_THIS(iface); HRESULT hres; TRACE("(%p)->(%x)\n", This, fUIActivate); if(!This->doc_obj->ipsite) { IOleClientSite *cs = This->doc_obj->client; IOleInPlaceSite *ips; if(!cs) { WARN("this->ipsite = NULL\n"); return E_UNEXPECTED; } hres = IOleClientSite_QueryInterface(cs, &IID_IOleInPlaceSiteWindowless, (void**)&ips); if(SUCCEEDED(hres)) This->doc_obj->ipsite = ips; else { hres = IOleClientSite_QueryInterface(cs, &IID_IOleInPlaceSiteEx, (void**)&ips); if(SUCCEEDED(hres)) This->doc_obj->ipsite = ips; else { hres = IOleClientSite_QueryInterface(cs, &IID_IOleInPlaceSite, (void**)&ips); if(SUCCEEDED(hres)) This->doc_obj->ipsite = ips; else { WARN("this->ipsite = NULL\n"); return E_NOINTERFACE; } } } IOleClientSite_AddRef(This->doc_obj->ipsite); This->doc_obj->request_uiactivate = FALSE; HTMLDocument_LockContainer(This->doc_obj, TRUE); } if(fUIActivate) { RECT rcBorderWidths; if(This->doc_obj->ui_active) return S_OK; if(!This->doc_obj->window_active) { hres = activate_window(This->doc_obj); if(FAILED(hres)) return hres; } This->doc_obj->focus = TRUE; if(This->doc_obj->nscontainer) nsIWebBrowserFocus_Activate(This->doc_obj->nscontainer->focus); notif_focus(This->doc_obj); update_doc(This, UPDATE_UI); hres = IOleInPlaceSite_OnUIActivate(This->doc_obj->ipsite); if(SUCCEEDED(hres)) { call_set_active_object((IOleInPlaceUIWindow*)This->doc_obj->frame, ACTOBJ(This)); }else { FIXME("OnUIActivate failed: %08x\n", hres); IOleInPlaceFrame_Release(This->doc_obj->frame); This->doc_obj->frame = NULL; This->doc_obj->ui_active = FALSE; return hres; } if(This->doc_obj->hostui) { hres = IDocHostUIHandler_ShowUI(This->doc_obj->hostui, This->doc_obj->usermode == EDITMODE ? DOCHOSTUITYPE_AUTHOR : DOCHOSTUITYPE_BROWSE, ACTOBJ(This), CMDTARGET(This), This->doc_obj->frame, This->doc_obj->ip_window); if(FAILED(hres)) IDocHostUIHandler_HideUI(This->doc_obj->hostui); } if(This->doc_obj->ip_window) call_set_active_object(This->doc_obj->ip_window, ACTOBJ(This)); memset(&rcBorderWidths, 0, sizeof(rcBorderWidths)); IOleInPlaceFrame_SetBorderSpace(This->doc_obj->frame, &rcBorderWidths); This->doc_obj->ui_active = TRUE; }else { This->doc_obj->focus = FALSE; nsIWebBrowserFocus_Deactivate(This->doc_obj->nscontainer->focus); if(This->doc_obj->ui_active) { This->doc_obj->ui_active = FALSE; if(This->doc_obj->ip_window) call_set_active_object(This->doc_obj->ip_window, NULL); if(This->doc_obj->frame) call_set_active_object((IOleInPlaceUIWindow*)This->doc_obj->frame, NULL); if(This->doc_obj->hostui) IDocHostUIHandler_HideUI(This->doc_obj->hostui); if(This->doc_obj->ipsite) IOleInPlaceSite_OnUIDeactivate(This->doc_obj->ipsite, FALSE); } } return S_OK; }
static ULONG WINAPI ClDispatch_AddRef(IDispatch *iface) { DocHost *This = DISP_THIS(iface); return IOleClientSite_AddRef(CLIENTSITE(This)); }
static ULONG WINAPI ClServiceProvider_AddRef(IServiceProvider *iface) { DocHost *This = SERVPROV_THIS(iface); return IOleClientSite_AddRef(CLIENTSITE(This)); }