static HRESULT WINAPI OleInPlaceObjectWindowless_InPlaceDeactivate(IOleInPlaceObjectWindowless *iface) { HTMLDocument *This = OLEINPLACEWND_THIS(iface); TRACE("(%p)\n", This); if(This->ui_active) IOleDocumentView_UIActivate(DOCVIEW(This), FALSE); This->window_active = FALSE; if(!This->in_place_active) return S_OK; if(This->frame) IOleInPlaceFrame_Release(This->frame); if(This->hwnd) { ShowWindow(This->hwnd, SW_HIDE); SetWindowPos(This->hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); } This->in_place_active = FALSE; if(This->ipsite) IOleInPlaceSite_OnInPlaceDeactivate(This->ipsite); return S_OK; }
void WebBrowser_OleObject_Destroy(WebBrowser *This) { if(This->client) IOleObject_SetClientSite(OLEOBJ(This), NULL); if(This->container) IOleContainer_Release(This->container); if(This->frame) IOleInPlaceFrame_Release(This->frame); if(This->uiwindow) IOleInPlaceUIWindow_Release(This->uiwindow); }
void DocHost_Release(DocHost *This) { if(This->client_disp) IDispatch_Release(This->client_disp); if(This->frame) IOleInPlaceFrame_Release(This->frame); DocHost_ClientSite_Release(This); ConnectionPointContainer_Destroy(&This->cps); SysFreeString(This->url); }
static HRESULT WINAPI OleInPlaceObjectWindowless_InPlaceDeactivate(IOleInPlaceObjectWindowless *iface) { HTMLDocument *This = impl_from_IOleInPlaceObjectWindowless(iface); TRACE("(%p)\n", This); if(This->doc_obj->ui_active) IOleDocumentView_UIActivate(&This->IOleDocumentView_iface, FALSE); This->doc_obj->window_active = FALSE; if(!This->doc_obj->in_place_active) return S_OK; if(This->doc_obj->frame) { IOleInPlaceFrame_Release(This->doc_obj->frame); This->doc_obj->frame = NULL; } if(This->doc_obj->hwnd) { ShowWindow(This->doc_obj->hwnd, SW_HIDE); SetWindowPos(This->doc_obj->hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); } This->doc_obj->focus = FALSE; notif_focus(This->doc_obj); This->doc_obj->in_place_active = FALSE; if(This->doc_obj->ipsite) { IOleInPlaceSiteEx *ipsiteex; HRESULT hres; hres = IOleInPlaceSite_QueryInterface(This->doc_obj->ipsite, &IID_IOleInPlaceSiteEx, (void**)&ipsiteex); if(SUCCEEDED(hres)) { IOleInPlaceSiteEx_OnInPlaceDeactivateEx(ipsiteex, TRUE); IOleInPlaceSiteEx_Release(ipsiteex); }else { IOleInPlaceSite_OnInPlaceDeactivate(This->doc_obj->ipsite); } } return S_OK; }
static HRESULT WINAPI PHInPlaceSite_GetWindowContext(IOleInPlaceSiteEx *iface, IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, RECT *lprcPosRect, RECT *lprcClipRect, OLEINPLACEFRAMEINFO *frame_info) { PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); IOleInPlaceUIWindow *ip_window; IOleInPlaceFrame *ip_frame; RECT pr, cr; HRESULT hres; TRACE("(%p)->(%p %p %p %p %p)\n", This, ppFrame, ppDoc, lprcPosRect, lprcClipRect, frame_info); if(!This->doc || !This->doc->basedoc.doc_obj || !This->doc->basedoc.doc_obj->ipsite) { FIXME("No ipsite\n"); return E_UNEXPECTED; } hres = IOleInPlaceSite_GetWindowContext(This->doc->basedoc.doc_obj->ipsite, &ip_frame, &ip_window, &pr, &cr, frame_info); if(FAILED(hres)) { WARN("GetWindowContext failed: %08x\n", hres); return hres; } if(ip_window) IOleInPlaceUIWindow_Release(ip_window); if(ip_frame) IOleInPlaceFrame_Release(ip_frame); hres = create_ip_frame(&ip_frame); if(FAILED(hres)) return hres; hres = create_ip_window(ppDoc); if(FAILED(hres)) return hres; *ppFrame = ip_frame; *lprcPosRect = This->rect; *lprcClipRect = This->rect; return S_OK; }
void release_dochost_client(DocHost *This) { if(This->hwnd) { DestroyWindow(This->hwnd); This->hwnd = NULL; } if(This->hostui) { IDocHostUIHandler_Release(This->hostui); This->hostui = NULL; } if(This->client_disp) { IDispatch_Release(This->client_disp); This->client_disp = NULL; } if(This->frame) { IOleInPlaceFrame_Release(This->frame); This->frame = NULL; } }
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 HRESULT activate_window(HTMLDocumentObj *This) { IOleInPlaceFrame *pIPFrame; IOleCommandTarget *cmdtrg; IOleInPlaceSiteEx *ipsiteex; RECT posrect, cliprect; OLEINPLACEFRAMEINFO frameinfo; HWND parent_hwnd; HRESULT hres; if(!serverwnd_class) register_serverwnd_class(); hres = IOleInPlaceSite_CanInPlaceActivate(This->ipsite); if(hres != S_OK) { WARN("CanInPlaceActivate returned: %08x\n", hres); return FAILED(hres) ? hres : E_FAIL; } hres = IOleInPlaceSite_GetWindowContext(This->ipsite, &pIPFrame, &This->ip_window, &posrect, &cliprect, &frameinfo); if(FAILED(hres)) { WARN("GetWindowContext failed: %08x\n", hres); return hres; } TRACE("got window context: %p %p {%d %d %d %d} {%d %d %d %d} {%d %x %p %p %d}\n", pIPFrame, This->ip_window, posrect.left, posrect.top, posrect.right, posrect.bottom, cliprect.left, cliprect.top, cliprect.right, cliprect.bottom, frameinfo.cb, frameinfo.fMDIApp, frameinfo.hwndFrame, frameinfo.haccel, frameinfo.cAccelEntries); hres = IOleInPlaceSite_GetWindow(This->ipsite, &parent_hwnd); if(FAILED(hres)) { WARN("GetWindow failed: %08x\n", hres); return hres; } TRACE("got parent window %p\n", parent_hwnd); if(This->hwnd) { if(GetParent(This->hwnd) != parent_hwnd) SetParent(This->hwnd, parent_hwnd); SetWindowPos(This->hwnd, HWND_TOP, posrect.left, posrect.top, posrect.right-posrect.left, posrect.bottom-posrect.top, SWP_NOACTIVATE | SWP_SHOWWINDOW); }else { CreateWindowExW(0, wszInternetExplorer_Server, NULL, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, posrect.left, posrect.top, posrect.right-posrect.left, posrect.bottom-posrect.top, parent_hwnd, NULL, hInst, This); TRACE("Created window %p\n", This->hwnd); SetWindowPos(This->hwnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW | SWP_NOACTIVATE | SWP_SHOWWINDOW); RedrawWindow(This->hwnd, NULL, NULL, RDW_INVALIDATE | RDW_NOERASE | RDW_ALLCHILDREN); /* NOTE: * Windows implementation calls: * RegisterWindowMessage("MSWHEEL_ROLLMSG"); */ SetTimer(This->hwnd, TIMER_ID, 100, NULL); } if(This->nscontainer) activate_gecko(This->nscontainer); This->in_place_active = TRUE; hres = IOleInPlaceSite_QueryInterface(This->ipsite, &IID_IOleInPlaceSiteEx, (void**)&ipsiteex); if(SUCCEEDED(hres)) { BOOL redraw = FALSE; hres = IOleInPlaceSiteEx_OnInPlaceActivateEx(ipsiteex, &redraw, 0); IOleInPlaceSiteEx_Release(ipsiteex); if(redraw) FIXME("unsupported redraw\n"); }else{ hres = IOleInPlaceSite_OnInPlaceActivate(This->ipsite); } if(FAILED(hres)) { WARN("OnInPlaceActivate failed: %08x\n", hres); This->in_place_active = FALSE; return hres; } hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget, (void**)&cmdtrg); if(SUCCEEDED(hres)) { VARIANT var; IOleInPlaceFrame_SetStatusText(pIPFrame, 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); IOleCommandTarget_Release(cmdtrg); } if(This->frame) IOleInPlaceFrame_Release(This->frame); This->frame = pIPFrame; if(!This->request_uiactivate) { hres = IOleInPlaceSite_QueryInterface(This->ipsite, &IID_IOleInPlaceSiteEx, (void**)&ipsiteex); if(SUCCEEDED(hres)) { IOleInPlaceSiteEx_RequestUIActivate(ipsiteex); IOleInPlaceSiteEx_Release(ipsiteex); } } This->window_active = TRUE; 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->ipsite) { FIXME("This->ipsite = NULL\n"); return E_FAIL; } if(fUIActivate) { RECT rcBorderWidths; if(This->ui_active) return S_OK; if(!This->window_active) { hres = activate_window(This); if(FAILED(hres)) return hres; } This->focus = TRUE; if(This->nscontainer) nsIWebBrowserFocus_Activate(This->nscontainer->focus); notif_focus(This); update_doc(This, UPDATE_UI); hres = IOleInPlaceSite_OnUIActivate(This->ipsite); if(SUCCEEDED(hres)) { call_set_active_object((IOleInPlaceUIWindow*)This->frame, ACTOBJ(This)); }else { FIXME("OnUIActivate failed: %08x\n", hres); IOleInPlaceFrame_Release(This->frame); This->frame = NULL; This->ui_active = FALSE; return hres; } hres = IDocHostUIHandler_ShowUI(This->hostui, This->usermode == EDITMODE ? DOCHOSTUITYPE_AUTHOR : DOCHOSTUITYPE_BROWSE, ACTOBJ(This), CMDTARGET(This), This->frame, This->ip_window); if(FAILED(hres)) IDocHostUIHandler_HideUI(This->hostui); if(This->ip_window) call_set_active_object(This->ip_window, ACTOBJ(This)); memset(&rcBorderWidths, 0, sizeof(rcBorderWidths)); IOleInPlaceFrame_SetBorderSpace(This->frame, &rcBorderWidths); This->ui_active = TRUE; }else { if(This->ui_active) { This->ui_active = FALSE; if(This->ip_window) call_set_active_object(This->ip_window, NULL); if(This->frame) call_set_active_object((IOleInPlaceUIWindow*)This->frame, NULL); if(This->hostui) IDocHostUIHandler_HideUI(This->hostui); if(This->ipsite) IOleInPlaceSite_OnUIDeactivate(This->ipsite, FALSE); } } return S_OK; }