static HRESULT WINAPI OleDocument_CreateView(IOleDocument *iface, IOleInPlaceSite *pIPSite, IStream *pstm, DWORD dwReserved, IOleDocumentView **ppView) { HTMLDocument *This = OLEDOC_THIS(iface); HRESULT hres; TRACE("(%p)->(%p %p %d %p)\n", This, pIPSite, pstm, dwReserved, ppView); if(!ppView) return E_INVALIDARG; /* FIXME: * Windows implementation creates new IOleDocumentView when function is called for the * first time and returns E_FAIL when it is called for the second time, but it doesn't matter * if the application uses returned interfaces, passed to ActivateMe or returned by * QueryInterface, so there is no reason to create new interface. This needs more testing. */ if(pIPSite) { hres = IOleDocumentView_SetInPlaceSite(DOCVIEW(This), pIPSite); if(FAILED(hres)) return hres; } if(pstm) FIXME("pstm is not supported\n"); IOleDocumentView_AddRef(DOCVIEW(This)); *ppView = DOCVIEW(This); return S_OK; }
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; }
static HRESULT WINAPI OleObject_DoVerb(IOleObject *iface, LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect) { HTMLDocument *This = OLEOBJ_THIS(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, DOCVIEW(This)); IOleDocumentSite_Release(pDocSite); }else { hres = IOleDocumentView_UIActivate(DOCVIEW(This), TRUE); if(SUCCEEDED(hres)) { if(lprcPosRect) { RECT rect; /* We need to pass rect as not const pointer */ rect = *lprcPosRect; IOleDocumentView_SetRect(DOCVIEW(This), &rect); } IOleDocumentView_Show(DOCVIEW(This), TRUE); } } return hres; }