diff options
-rw-r--r-- | framework/inc/services/desktop.hxx | 17 | ||||
-rw-r--r-- | framework/source/services/desktop.cxx | 10 |
2 files changed, 24 insertions, 3 deletions
diff --git a/framework/inc/services/desktop.hxx b/framework/inc/services/desktop.hxx index ee2d5762d710..4b6dbc0617c7 100644 --- a/framework/inc/services/desktop.hxx +++ b/framework/inc/services/desktop.hxx @@ -373,8 +373,21 @@ class Desktop : private cppu::BaseMutex, private: - bool m_bIsTerminated; /// check flag to protect us against dispose before terminate! - /// see dispose() for further information! + /** check flag to protect us against dispose before terminate! + * see dispose() for further information! + */ + bool m_bIsTerminated; + + /** when true, the call came form session manager + * the methode is Desktop::terminateQuickstarterToo() + * this the only one place where set this to true + * In this case, when one frame break, not make + * question for other, the break of shutdown or logout + * can be only once. + * In Desktop::impl_closeFrames would be test and break + * the loop and reset to false + */ + bool m_bSession; css::uno::Reference< css::uno::XComponentContext > m_xContext; /// reference to factory, which has create this instance FrameContainer m_aChildTaskContainer; /// array of child tasks (children of desktop are tasks; and tasks are also frames - But pure frames are not accepted!) diff --git a/framework/source/services/desktop.cxx b/framework/source/services/desktop.cxx index e5133a7302eb..b210434b584c 100644 --- a/framework/source/services/desktop.cxx +++ b/framework/source/services/desktop.cxx @@ -158,6 +158,7 @@ Desktop::Desktop( const css::uno::Reference< css::uno::XComponentContext >& xCon , cppu::OPropertySetHelper( cppu::WeakComponentImplHelperBase::rBHelper ) // Init member , m_bIsTerminated ( false ) // see dispose() for further information! + , m_bSession ( false ) , m_xContext ( xContext ) , m_aChildTaskContainer ( ) , m_aListenerContainer ( m_aMutex ) @@ -389,6 +390,7 @@ namespace bool SAL_CALL Desktop::terminateQuickstarterToo() { QuickstartSuppressor aQuickstartSuppressor(this, m_xQuickLauncher); + m_bSession = true; return terminate(); } @@ -1702,7 +1704,10 @@ bool Desktop::impl_closeFrames(bool bAllowUI) if ( ! bSuspended ) { ++nNonClosedFrames; - continue; + if(m_bSession) + break; + else + continue; } } @@ -1754,6 +1759,9 @@ bool Desktop::impl_closeFrames(bool bAllowUI) } } + // reset the session + m_bSession = false; + return (nNonClosedFrames < 1); } |