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 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 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 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; }