diff options
Diffstat (limited to 'framework')
-rw-r--r-- | framework/source/dispatch/dispatchprovider.cxx | 20 | ||||
-rw-r--r-- | framework/source/layoutmanager/layoutmanager.cxx | 1 |
2 files changed, 20 insertions, 1 deletions
diff --git a/framework/source/dispatch/dispatchprovider.cxx b/framework/source/dispatch/dispatchprovider.cxx index 051640fc3724..392e5574d82d 100644 --- a/framework/source/dispatch/dispatchprovider.cxx +++ b/framework/source/dispatch/dispatchprovider.cxx @@ -489,7 +489,25 @@ css::uno::Reference< css::frame::XDispatch > DispatchProvider::implts_queryFrame ) { // There exist a hard coded interception for special URLs. - if (lcl_isCloseDispatch (aURL)) + if ( + (aURL.Complete.equalsAscii(".uno:CloseDoc" )) || + (aURL.Complete.equalsAscii(".uno:CloseWin" )) + ) + { + css::uno::Reference< css::frame::XDispatchProvider > xParent( xFrame->getCreator(), css::uno::UNO_QUERY ); + // In case the frame is not a top one, is not based on system window and has a parent, + // the parent frame should to be queried for the correct dispatcher. + // See i93473 + if ( + !WindowHelper::isTopWindow(xFrame->getContainerWindow()) && + !VCLUnoHelper::GetWindow(xFrame->getContainerWindow())->IsSystemWindow() && + xParent.is() + ) + xDispatcher = xParent->queryDispatch(aURL, SPECIALTARGET_SELF, 0); + else + xDispatcher = implts_getOrCreateDispatchHelper( E_CLOSEDISPATCHER, xFrame ); + } + else if (aURL.Complete.equalsAscii(".uno:CloseFrame")) xDispatcher = implts_getOrCreateDispatchHelper( E_CLOSEDISPATCHER, xFrame ); if ( ! xDispatcher.is()) diff --git a/framework/source/layoutmanager/layoutmanager.cxx b/framework/source/layoutmanager/layoutmanager.cxx index 90fbd3d2356e..932dd7fd1019 100644 --- a/framework/source/layoutmanager/layoutmanager.cxx +++ b/framework/source/layoutmanager/layoutmanager.cxx @@ -3278,6 +3278,7 @@ void LayoutManager::implts_updateUIElementsVisibleState( sal_Bool bSetVisible ) WriteGuard aWriteLock( m_aLock ); m_aDockingArea = css::awt::Rectangle(); + m_bMustDoLayout = sal_True; aWriteLock.unlock(); } catch ( Exception& ) |