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 OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID) { WebBrowser *This = impl_from_IOleControl(iface); TRACE("(%p)->(%d)\n", This, dispID); switch(dispID) { case DISPID_UNKNOWN: /* Unknown means multiple properties changed, so check them all. * BUT the Webbrowser OleControl object doesn't appear to do this. */ return S_OK; case DISPID_AMBIENT_DLCONTROL: return S_OK; case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED: return on_offlineconnected_change(This); case DISPID_AMBIENT_SILENT: return on_silent_change(This); } FIXME("Unknown dispID %d\n", dispID); return E_NOTIMPL; }
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE pClientSite) { WebBrowser *This = impl_from_IOleObject(iface); IDocHostUIHandler *hostui; IOleCommandTarget *olecmd; BOOL get_olecmd = TRUE; IOleContainer *container; IDispatch *disp; HRESULT hres; TRACE("(%p)->(%p)\n", This, pClientSite); if(This->client_closed) { IOleClientSite_Release(This->client_closed); This->client_closed = NULL; } if(This->client == pClientSite) return S_OK; if(This->client && pClientSite) { get_olecmd = FALSE; olecmd = This->doc_host.olecmd; if(olecmd) IOleCommandTarget_AddRef(olecmd); } release_client_site(This, !pClientSite); if(!pClientSite) { on_commandstate_change(&This->doc_host, CSC_NAVIGATEBACK, FALSE); on_commandstate_change(&This->doc_host, CSC_NAVIGATEFORWARD, FALSE); 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; if(get_olecmd) { 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); } hres = IOleContainer_QueryInterface(container, &IID_IOleCommandTarget, (void**)&olecmd); if(FAILED(hres)) olecmd = NULL; IOleContainer_Release(container); }else { hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget, (void**)&olecmd); if(FAILED(hres)) olecmd = NULL; } } This->doc_host.olecmd = olecmd; if(This->shell_embedding_hwnd) { IOleInPlaceSite *inplace; HWND parent; hres = IOleClientSite_QueryInterface(This->client, &IID_IOleInPlaceSite, (void**)&inplace); if(SUCCEEDED(hres)) { hres = IOleInPlaceSite_GetWindow(inplace, &parent); IOleInPlaceSite_Release(inplace); if(SUCCEEDED(hres)) SHSetParentHwnd(This->shell_embedding_hwnd, parent); } }else { create_shell_embedding_hwnd(This); } on_offlineconnected_change(This); on_silent_change(This); return S_OK; }