mshtml: Improved OleDocumentView_UIActivate implementation.

This commit is contained in:
Piotr Caban 2009-12-07 14:54:33 +01:00 committed by Alexandre Julliard
parent 24601ed1db
commit 8c06ed96ae
2 changed files with 43 additions and 2 deletions

View File

@ -379,6 +379,7 @@ struct HTMLDocumentObj {
HWND hwnd;
HWND tooltips_hwnd;
BOOL request_uiactivate;
BOOL in_place_active;
BOOL ui_active;
BOOL window_active;

View File

@ -342,6 +342,14 @@ static HRESULT activate_window(HTMLDocumentObj *This)
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;
@ -466,6 +474,7 @@ static HRESULT WINAPI OleDocumentView_SetInPlaceSite(IOleDocumentView *iface, IO
IOleInPlaceSite_Release(This->doc_obj->ipsite);
This->doc_obj->ipsite = pIPSite;
This->doc_obj->request_uiactivate = TRUE;
return S_OK;
}
@ -557,6 +566,10 @@ static HRESULT WINAPI OleDocumentView_Show(IOleDocumentView *iface, BOOL fShow)
ShowWindow(This->doc_obj->hwnd, SW_SHOW);
}else {
ShowWindow(This->doc_obj->hwnd, SW_HIDE);
if(This->doc_obj->in_place_active)
IOleInPlaceObjectWindowless_InPlaceDeactivate(INPLACEWIN(This));
if(This->doc_obj->ip_window) {
IOleInPlaceUIWindow_Release(This->doc_obj->ip_window);
This->doc_obj->ip_window = NULL;
@ -574,8 +587,35 @@ static HRESULT WINAPI OleDocumentView_UIActivate(IOleDocumentView *iface, BOOL f
TRACE("(%p)->(%x)\n", This, fUIActivate);
if(!This->doc_obj->ipsite) {
FIXME("This->ipsite = NULL\n");
return E_FAIL;
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) {