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 hwnd;
HWND tooltips_hwnd; HWND tooltips_hwnd;
BOOL request_uiactivate;
BOOL in_place_active; BOOL in_place_active;
BOOL ui_active; BOOL ui_active;
BOOL window_active; BOOL window_active;

View File

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