static HWND get_container_hwnd(WindowsMediaPlayer *This) { IOleWindow *ole_window; HWND hwnd = NULL; HRESULT hres; /* IOleInPlaceSite (which inherits from IOleWindow) is preferred. */ hres = IOleClientSite_QueryInterface(This->client_site, &IID_IOleInPlaceSite, (void**)&ole_window); if(FAILED(hres)) { hres = IOleClientSite_QueryInterface(This->client_site, &IID_IOleWindow, (void**)&ole_window); if(FAILED(hres)) { IOleContainer *container = NULL; hres = IOleClientSite_GetContainer(This->client_site, &container); if(SUCCEEDED(hres)) { hres = IOleContainer_QueryInterface(container, &IID_IOleWindow, (void**)&ole_window); IOleContainer_Release(container); } } } if(FAILED(hres)) return NULL; hres = IOleWindow_GetWindow(ole_window, &hwnd); IOleWindow_Release(ole_window); if(FAILED(hres)) return NULL; TRACE("Got window %p\n", hwnd); return hwnd; }
static HRESULT activate_inplace(WindowsMediaPlayer *This) { IOleInPlaceSiteWindowless *ipsite_windowless; IOleInPlaceSiteEx *ipsiteex = NULL; IOleInPlaceSite *ipsite; IOleInPlaceUIWindow *ip_window = NULL; IOleInPlaceFrame *ip_frame = NULL; RECT posrect = {0}, cliprect = {0}; OLEINPLACEFRAMEINFO frameinfo = { sizeof(frameinfo) }; HRESULT hres; if(This->hwnd) { FIXME("Already activated\n"); return E_UNEXPECTED; } hres = IOleClientSite_QueryInterface(This->client_site, &IID_IOleInPlaceSiteWindowless, (void**)&ipsite_windowless); if(SUCCEEDED(hres)) { hres = IOleInPlaceSiteWindowless_CanWindowlessActivate(ipsite_windowless); IOleInPlaceSiteWindowless_Release(ipsite_windowless); if(hres == S_OK) FIXME("Windowless activation not supported\n"); ipsiteex = (IOleInPlaceSiteEx*)ipsite_windowless; }else { IOleClientSite_QueryInterface(This->client_site, &IID_IOleInPlaceSiteEx, (void**)&ipsiteex); } if(ipsiteex) { BOOL redraw = FALSE; /* Not really used. */ IOleInPlaceSiteEx_OnInPlaceActivateEx(ipsiteex, &redraw, 0); ipsite = (IOleInPlaceSite*)ipsiteex; }else { IOleClientSite_QueryInterface(This->client_site, &IID_IOleInPlaceSite, (void**)&ipsite); if(FAILED(hres)) { FIXME("No IOleInPlaceSite instance\n"); return hres; } IOleInPlaceSite_OnInPlaceActivate(ipsite); } hres = IOleInPlaceSite_GetWindowContext(ipsite, &ip_frame, &ip_window, &posrect, &cliprect, &frameinfo); IOleInPlaceSite_Release(ipsite); if(FAILED(hres)) { FIXME("GetWindowContext failed: %08x\n", hres); return hres; } This->hwnd = create_wmp_window(This, &posrect); if(!This->hwnd) return E_FAIL; IOleClientSite_ShowObject(This->client_site); return S_OK; }
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; }
void update_title(HTMLDocumentObj *This) { IOleCommandTarget *olecmd; HRESULT hres; if(!(This->update & UPDATE_TITLE)) return; This->update &= ~UPDATE_TITLE; if(!This->client) return; hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget, (void**)&olecmd); if(SUCCEEDED(hres)) { VARIANT title; WCHAR empty[] = {0}; V_VT(&title) = VT_BSTR; V_BSTR(&title) = SysAllocString(empty); IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETTITLE, OLECMDEXECOPT_DONTPROMPTUSER, &title, NULL); SysFreeString(V_BSTR(&title)); IOleCommandTarget_Release(olecmd); } }
static HRESULT WINAPI ControlSite_TranslateAccelerator(IOleControlSite *iface, MSG *pMsg, DWORD grfModifiers) { DocHost *This = impl_from_IOleControlSite(iface); IOleObject *wb_obj; IOleClientSite *clientsite; IOleControlSite *controlsite; HRESULT hr; TRACE("(%p)->(%p, %08x)\n", This, pMsg, grfModifiers); hr = IDispatch_QueryInterface(This->disp, &IID_IOleObject, (void**)&wb_obj); if(SUCCEEDED(hr)) { hr = IOleObject_GetClientSite(wb_obj, &clientsite); if(SUCCEEDED(hr)) { hr = IOleClientSite_QueryInterface(clientsite, &IID_IOleControlSite, (void**)&controlsite); if(SUCCEEDED(hr)) { hr = IOleControlSite_TranslateAccelerator(controlsite, pMsg, grfModifiers); IOleControlSite_Release(controlsite); } IOleClientSite_Release(clientsite); } IOleObject_Release(wb_obj); } if(FAILED(hr)) return S_FALSE; else return hr; }
static void notify_travellog_update(HTMLDocumentObj *doc) { IOleCommandTarget *cmdtrg; HRESULT hres; if(!doc->is_webbrowser) return; /* Don't notify if we were in about: page */ if(doc->basedoc.window->uri) { DWORD scheme; hres = IUri_GetScheme(doc->basedoc.window->uri, &scheme); if(SUCCEEDED(hres) && scheme == URL_SCHEME_ABOUT) return; } hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&cmdtrg); if(SUCCEEDED(hres)) { VARIANT vin; V_VT(&vin) = VT_I4; V_I4(&vin) = 0; IOleCommandTarget_Exec(cmdtrg, &CGID_Explorer, CMDID_EXPLORER_UPDATEHISTORY, 0, &vin, NULL); IOleCommandTarget_Release(cmdtrg); } }
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 HRESULT DocHostContainer_exec(DocHost *doc_host, const GUID *cmd_group, DWORD cmdid, DWORD execopt, VARIANT *in, VARIANT *out) { WebBrowser *This = impl_from_DocHost(doc_host); IOleCommandTarget *cmdtrg = NULL; HRESULT hres; if(This->client) { hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget, (void**)&cmdtrg); if(FAILED(hres)) cmdtrg = NULL; } if(!cmdtrg && This->container) { hres = IOleContainer_QueryInterface(This->container, &IID_IOleCommandTarget, (void**)&cmdtrg); if(FAILED(hres)) cmdtrg = NULL; } if(!cmdtrg) return E_NOTIMPL; hres = IOleCommandTarget_Exec(cmdtrg, cmd_group, cmdid, execopt, in, out); IOleCommandTarget_Release(cmdtrg); if(SUCCEEDED(hres)) TRACE("Exec returned %08x %s\n", hres, debugstr_variant(out)); else FIXME("Exec failed\n"); return hres; }
static HRESULT activate_inplace(WebBrowser *This, IOleClientSite *active_site) { HWND parent_hwnd; HRESULT hres; if(This->inplace) return S_OK; if(!active_site) return E_INVALIDARG; hres = IOleClientSite_QueryInterface(active_site, &IID_IOleInPlaceSite, (void**)&This->inplace); if(FAILED(hres)) { WARN("Could not get IOleInPlaceSite\n"); return hres; } hres = IOleInPlaceSite_CanInPlaceActivate(This->inplace); if(hres != S_OK) { WARN("CanInPlaceActivate returned: %08x\n", hres); IOleInPlaceSite_Release(This->inplace); return E_FAIL; } hres = IOleInPlaceSite_GetWindow(This->inplace, &parent_hwnd); if(SUCCEEDED(hres)) SHSetParentHwnd(This->shell_embedding_hwnd, parent_hwnd); IOleInPlaceSite_OnInPlaceActivate(This->inplace); This->frameinfo.cb = sizeof(OLEINPLACEFRAMEINFO); IOleInPlaceSite_GetWindowContext(This->inplace, &This->doc_host.frame, &This->uiwindow, &This->pos_rect, &This->clip_rect, &This->frameinfo); SetWindowPos(This->shell_embedding_hwnd, NULL, This->pos_rect.left, This->pos_rect.top, This->pos_rect.right-This->pos_rect.left, This->pos_rect.bottom-This->pos_rect.top, SWP_NOZORDER | SWP_SHOWWINDOW); if(This->client) { IOleContainer *container; IOleClientSite_ShowObject(This->client); hres = IOleClientSite_GetContainer(This->client, &container); if(SUCCEEDED(hres)) { if(This->container) IOleContainer_Release(This->container); This->container = container; } } if(This->doc_host.frame) IOleInPlaceFrame_GetWindow(This->doc_host.frame, &This->frame_hwnd); return S_OK; }
static LRESULT on_timer(HTMLDocumentObj *This) { TRACE("(%p) %x\n", This, This->update); KillTimer(This->hwnd, TIMER_ID); if(!This->update) return 0; if(This->update & UPDATE_UI) { if(This->hostui) IDocHostUIHandler_UpdateUI(This->hostui); if(This->client) { IOleCommandTarget *cmdtrg; HRESULT hres; hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget, (void**)&cmdtrg); if(SUCCEEDED(hres)) { IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_UPDATECOMMANDS, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL); IOleCommandTarget_Release(cmdtrg); } } } update_title(This); This->update = 0; return 0; }
static void handle_docobj_load(HTMLDocumentObj *doc) { IOleCommandTarget *olecmd = NULL; HRESULT hres; if(!doc->client) return; hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); if(SUCCEEDED(hres)) { if(doc->download_state) { VARIANT state, progress; V_VT(&progress) = VT_I4; V_I4(&progress) = 0; IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETPROGRESSPOS, OLECMDEXECOPT_DONTPROMPTUSER, &progress, NULL); V_VT(&state) = VT_I4; V_I4(&state) = 0; IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETDOWNLOADSTATE, OLECMDEXECOPT_DONTPROMPTUSER, &state, NULL); } IOleCommandTarget_Exec(olecmd, &CGID_ShellDocView, 103, 0, NULL, NULL); IOleCommandTarget_Exec(olecmd, &CGID_MSHTML, IDM_PARSECOMPLETE, 0, NULL, NULL); IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_HTTPEQUIV_DONE, 0, NULL, NULL); IOleCommandTarget_Release(olecmd); } doc->download_state = 0; }
void prepare_for_binding(HTMLDocument *This, IMoniker *mon, DWORD flags) { HRESULT hres; if(This->doc_obj->client) { VARIANT silent, offline; 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"); } hres = get_client_disp_property(This->doc_obj->client, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED, &offline); if(SUCCEEDED(hres)) { if(V_VT(&offline) != VT_BOOL) WARN("offline = %s\n", debugstr_variant(&offline)); else if(V_BOOL(&offline)) FIXME("offline == true\n"); } } if(This->window->mon) { update_doc(This, UPDATE_TITLE|UPDATE_UI); }else { update_doc(This, UPDATE_TITLE); set_current_mon(This->window, mon, flags); } if(This->doc_obj->client) { IOleCommandTarget *cmdtrg = NULL; hres = IOleClientSite_QueryInterface(This->doc_obj->client, &IID_IOleCommandTarget, (void**)&cmdtrg); if(SUCCEEDED(hres)) { VARIANT var, out; if(flags & BINDING_NAVIGATED) { V_VT(&var) = VT_UNKNOWN; V_UNKNOWN(&var) = (IUnknown*)&This->window->base.IHTMLWindow2_iface; V_VT(&out) = VT_EMPTY; hres = IOleCommandTarget_Exec(cmdtrg, &CGID_ShellDocView, 63, 0, &var, &out); if(SUCCEEDED(hres)) VariantClear(&out); }else if(!(flags & BINDING_FROMHIST)) { V_VT(&var) = VT_I4; V_I4(&var) = 0; IOleCommandTarget_Exec(cmdtrg, &CGID_ShellDocView, 37, 0, &var, NULL); } IOleCommandTarget_Release(cmdtrg); } } }
static HRESULT WINAPI PersistHistory_LoadHistory(IPersistHistory *iface, IStream *pStream, IBindCtx *pbc) { HTMLDocument *This = impl_from_IPersistHistory(iface); ULONG str_len, read; WCHAR *uri_str; IUri *uri; HRESULT hres; TRACE("(%p)->(%p %p)\n", This, pStream, pbc); if(!This->window) { FIXME("No current window\n"); return E_UNEXPECTED; } if(pbc) FIXME("pbc not supported\n"); if(This->doc_obj->client) { IOleCommandTarget *cmdtrg = NULL; hres = IOleClientSite_QueryInterface(This->doc_obj->client, &IID_IOleCommandTarget, (void**)&cmdtrg); if(SUCCEEDED(hres)) { IOleCommandTarget_Exec(cmdtrg, &CGID_ShellDocView, 138, 0, NULL, NULL); IOleCommandTarget_Release(cmdtrg); } } hres = IStream_Read(pStream, &str_len, sizeof(str_len), &read); if(FAILED(hres)) return hres; if(read != sizeof(str_len)) return E_FAIL; uri_str = heap_alloc((str_len+1)*sizeof(WCHAR)); if(!uri_str) return E_OUTOFMEMORY; hres = IStream_Read(pStream, uri_str, str_len*sizeof(WCHAR), &read); if(SUCCEEDED(hres) && read != str_len*sizeof(WCHAR)) hres = E_FAIL; if(SUCCEEDED(hres)) { uri_str[str_len] = 0; hres = create_uri(uri_str, 0, &uri); } heap_free(uri_str); if(FAILED(hres)) return hres; hres = load_uri(This->window, uri, BINDING_FROMHIST); IUri_Release(uri); return hres; }
void notif_focus(HTMLDocument *This) { IOleControlSite *site; HRESULT hres; hres = IOleClientSite_QueryInterface(This->client, &IID_IOleControlSite, (void**)&site); if(FAILED(hres)) return; IOleControlSite_OnFocus(site, This->focus); IOleControlSite_Release(site); }
static HRESULT activate_inplace(WebBrowser *This, IOleClientSite *active_site, HWND parent_hwnd) { HRESULT hres; if(This->inplace) return S_OK; if(!active_site) return E_INVALIDARG; hres = IOleClientSite_QueryInterface(active_site, &IID_IOleInPlaceSite, (void**)&This->inplace); if(FAILED(hres)) { WARN("Could not get IOleInPlaceSite\n"); return hres; } hres = IOleInPlaceSite_CanInPlaceActivate(This->inplace); if(hres != S_OK) { WARN("CanInPlaceActivate returned: %08lx\n", hres); IOleInPlaceSite_Release(This->inplace); return E_FAIL; } hres = IOleInPlaceSite_GetWindow(This->inplace, &This->iphwnd); if(FAILED(hres)) This->iphwnd = parent_hwnd; IOleInPlaceSite_OnInPlaceActivate(This->inplace); IOleInPlaceSite_GetWindowContext(This->inplace, &This->frame, &This->uiwindow, &This->pos_rect, &This->clip_rect, &This->frameinfo); SetWindowPos(This->shell_embedding_hwnd, NULL, This->pos_rect.left, This->pos_rect.top, This->pos_rect.right-This->pos_rect.left, This->pos_rect.bottom-This->pos_rect.top, SWP_NOZORDER | SWP_SHOWWINDOW); if(This->client) { IOleClientSite_ShowObject(This->client); IOleClientSite_GetContainer(This->client, &This->container); } if(This->frame) IOleInPlaceFrame_GetWindow(This->frame, &This->frame_hwnd); return S_OK; }
static void deactivate_window(WindowsMediaPlayer *This) { IOleInPlaceSite *ip_site; HRESULT hres; hres = IOleClientSite_QueryInterface(This->client_site, &IID_IOleInPlaceSite, (void**)&ip_site); if(SUCCEEDED(hres)) { IOleInPlaceSite_OnInPlaceDeactivate(ip_site); IOleInPlaceSite_Release(ip_site); } DestroyWindow(This->hwnd); This->hwnd = NULL; }
static void notify_on_focus(WebBrowser *This, BOOL got_focus) { IOleControlSite *control_site; HRESULT hres; if(!This->client) return; hres = IOleClientSite_QueryInterface(This->client, &IID_IOleControlSite, (void**)&control_site); if(FAILED(hres)) return; IOleControlSite_OnFocus(control_site, got_focus); IOleControlSite_Release(control_site); }
/*********************************************************************** * AtlAxGetHost [atl100.@] * */ HRESULT WINAPI AtlAxGetHost(HWND hWnd, IUnknown **host) { IOCS *This; TRACE("(%p, %p)\n", hWnd, host); *host = NULL; This = (IOCS*) GetPropW( hWnd, wine_atl_iocsW ); if ( !This ) { WARN("No container attached to %p\n", hWnd ); return E_FAIL; } return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, &IID_IUnknown, (void**)host); }
static void set_downloading_proc(task_t *_task) { download_proc_task_t *task = (download_proc_task_t*)_task; HTMLDocumentObj *doc = task->doc; IOleCommandTarget *olecmd; HRESULT hres; TRACE("(%p)\n", doc); set_statustext(doc, IDS_STATUS_DOWNLOADINGFROM, task->url); CoTaskMemFree(task->url); if(!doc->client) return; if(task->set_download) { hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); if(SUCCEEDED(hres)) { VARIANT var; V_VT(&var) = VT_I4; V_I4(&var) = 1; IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETDOWNLOADSTATE, OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL); IOleCommandTarget_Release(olecmd); } doc->download_state = 1; } if(doc->view_sink) IAdviseSink_OnViewChange(doc->view_sink, DVASPECT_CONTENT, -1); if(doc->hostui) { IDropTarget *drop_target = NULL; hres = IDocHostUIHandler_GetDropTarget(doc->hostui, NULL /* FIXME */, &drop_target); if(drop_target) { FIXME("Use IDropTarget\n"); IDropTarget_Release(drop_target); } } }
static HRESULT WINAPI PHServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv) { PluginHost *This = impl_from_IServiceProvider(iface); if(IsEqualGUID(guidService, &SID_SBindHost)) { TRACE("SID_SBindHost service\n"); return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv); } TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv); if(!This->doc || !This->doc->basedoc.window) { *ppv = NULL; return E_NOINTERFACE; } return IServiceProvider_QueryService(&This->doc->basedoc.window->base.IServiceProvider_iface, guidService, riid, ppv); }
/* Calls undocumented 84 cmd of CGID_ShellDocView */ void call_docview_84(HTMLDocumentObj *doc) { IOleCommandTarget *olecmd; VARIANT var; HRESULT hres; if(!doc->client) return; hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); if(FAILED(hres)) return; VariantInit(&var); hres = IOleCommandTarget_Exec(olecmd, &CGID_ShellDocView, 84, 0, NULL, &var); IOleCommandTarget_Release(olecmd); if(SUCCEEDED(hres) && V_VT(&var) != VT_NULL) FIXME("handle result\n"); }
static void notify_travellog_update(HTMLDocumentObj *doc) { IOleCommandTarget *cmdtrg; HRESULT hres; if(!doc->webbrowser) return; hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&cmdtrg); if(SUCCEEDED(hres)) { VARIANT vin; V_VT(&vin) = VT_I4; V_I4(&vin) = 0; IOleCommandTarget_Exec(cmdtrg, &CGID_Explorer, CMDID_EXPLORER_UPDATEHISTORY, 0, &vin, NULL); IOleCommandTarget_Release(cmdtrg); } }
static void handle_docobj_load(HTMLDocumentObj *doc) { HRESULT hres; if(doc->nscontainer->editor_controller) { nsIController_Release(doc->nscontainer->editor_controller); doc->nscontainer->editor_controller = NULL; } if(doc->usermode == EDITMODE) handle_edit_load(&doc->basedoc); if(doc->client) { IOleCommandTarget *olecmd = NULL; hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); if(SUCCEEDED(hres)) { if(doc->download_state) { VARIANT state, progress; V_VT(&progress) = VT_I4; V_I4(&progress) = 0; IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETPROGRESSPOS, OLECMDEXECOPT_DONTPROMPTUSER, &progress, NULL); V_VT(&state) = VT_I4; V_I4(&state) = 0; IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETDOWNLOADSTATE, OLECMDEXECOPT_DONTPROMPTUSER, &state, NULL); } IOleCommandTarget_Exec(olecmd, &CGID_ShellDocView, 103, 0, NULL, NULL); IOleCommandTarget_Exec(olecmd, &CGID_MSHTML, IDM_PARSECOMPLETE, 0, NULL, NULL); IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_HTTPEQUIV_DONE, 0, NULL, NULL); IOleCommandTarget_Release(olecmd); } } doc->download_state = 0; }
void set_download_state(HTMLDocumentObj *doc, int state) { if(doc->client) { IOleCommandTarget *olecmd; HRESULT hres; hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); if(SUCCEEDED(hres)) { VARIANT var; V_VT(&var) = VT_I4; V_I4(&var) = state; IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETDOWNLOADSTATE, OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL); IOleCommandTarget_Release(olecmd); } } doc->download_state = state; }
static void set_progress_proc(task_t *_task) { docobj_task_t *task = (docobj_task_t*)_task; IOleCommandTarget *olecmd = NULL; HTMLDocumentObj *doc = task->doc; HRESULT hres; TRACE("(%p)\n", doc); if(doc->client) IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); if(olecmd) { VARIANT progress_max, progress; V_VT(&progress_max) = VT_I4; V_I4(&progress_max) = 0; /* FIXME */ IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETPROGRESSMAX, OLECMDEXECOPT_DONTPROMPTUSER, &progress_max, NULL); V_VT(&progress) = VT_I4; V_I4(&progress) = 0; /* FIXME */ IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETPROGRESSPOS, OLECMDEXECOPT_DONTPROMPTUSER, &progress, NULL); IOleCommandTarget_Release(olecmd); } if(doc->usermode == EDITMODE && doc->hostui) { DOCHOSTUIINFO hostinfo; memset(&hostinfo, 0, sizeof(DOCHOSTUIINFO)); hostinfo.cbSize = sizeof(DOCHOSTUIINFO); hres = IDocHostUIHandler_GetHostInfo(doc->hostui, &hostinfo); if(SUCCEEDED(hres)) /* FIXME: use hostinfo */ TRACE("hostinfo = {%u %08x %08x %s %s}\n", hostinfo.cbSize, hostinfo.dwFlags, hostinfo.dwDoubleClick, debugstr_w(hostinfo.pchHostCss), debugstr_w(hostinfo.pchHostNS)); } }
static void create_shell_embedding_hwnd(WebBrowser *This) { IOleInPlaceSite *inplace; HWND parent = NULL; HRESULT hres; static const WCHAR wszShellEmbedding[] = {'S','h','e','l','l',' ','E','m','b','e','d','d','i','n','g',0}; if(!shell_embedding_atom) { static WNDCLASSEXW wndclass = { sizeof(wndclass), CS_DBLCLKS, shell_embedding_proc, 0, 0 /* native uses 8 */, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1), NULL, wszShellEmbedding, NULL }; wndclass.hInstance = shdocvw_hinstance; RegisterClassExW(&wndclass); } hres = IOleClientSite_QueryInterface(This->client, &IID_IOleInPlaceSite, (void**)&inplace); if(SUCCEEDED(hres)) { IOleInPlaceSite_GetWindow(inplace, &parent); IOleInPlaceSite_Release(inplace); } This->doc_host.frame_hwnd = This->shell_embedding_hwnd = CreateWindowExW( WS_EX_WINDOWEDGE, wszShellEmbedding, wszShellEmbedding, WS_CLIPSIBLINGS | WS_CLIPCHILDREN | (parent ? WS_CHILD | WS_TABSTOP : WS_POPUP | WS_MAXIMIZEBOX), 0, 0, 0, 0, parent, NULL, shdocvw_hinstance, This); TRACE("parent=%p hwnd=%p\n", parent, This->shell_embedding_hwnd); }
HRESULT get_client_disp_property(IOleClientSite *client, DISPID dispid, VARIANT *res) { IDispatch *disp = NULL; DISPPARAMS dispparams = {NULL, 0}; UINT err; HRESULT hres; hres = IOleClientSite_QueryInterface(client, &IID_IDispatch, (void**)&disp); if(FAILED(hres)) { TRACE("Could not get IDispatch\n"); return hres; } VariantInit(res); hres = IDispatch_Invoke(disp, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &dispparams, res, NULL, &err); IDispatch_Release(disp); return hres; }
static HRESULT WINAPI OleObject_DoVerb(IOleObject *iface, LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect) { HTMLDocument *This = impl_from_IOleObject(iface); IOleDocumentSite *pDocSite; HRESULT hres; TRACE("(%p)->(%d %p %p %d %p %p)\n", This, iVerb, lpmsg, pActiveSite, lindex, hwndParent, lprcPosRect); if(iVerb != OLEIVERB_SHOW && iVerb != OLEIVERB_UIACTIVATE && iVerb != OLEIVERB_INPLACEACTIVATE) { FIXME("iVerb = %d not supported\n", iVerb); return E_NOTIMPL; } if(!pActiveSite) pActiveSite = This->doc_obj->client; hres = IOleClientSite_QueryInterface(pActiveSite, &IID_IOleDocumentSite, (void**)&pDocSite); if(SUCCEEDED(hres)) { HTMLDocument_LockContainer(This->doc_obj, TRUE); /* FIXME: Create new IOleDocumentView. See CreateView for more info. */ hres = IOleDocumentSite_ActivateMe(pDocSite, &This->IOleDocumentView_iface); IOleDocumentSite_Release(pDocSite); }else { hres = IOleDocumentView_UIActivate(&This->IOleDocumentView_iface, TRUE); if(SUCCEEDED(hres)) { if(lprcPosRect) { RECT rect; /* We need to pass rect as not const pointer */ rect = *lprcPosRect; IOleDocumentView_SetRect(&This->IOleDocumentView_iface, &rect); } IOleDocumentView_Show(&This->IOleDocumentView_iface, TRUE); } } return hres; }
static HRESULT STDMETHODCALLTYPE Frame_QueryInterface(IOleInPlaceFrame *iface, REFIID riid, LPVOID *ppvObj) { WebBrowserContainer *This = impl_from_IOleInPlaceFrame(iface); return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppvObj); }
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; }