diff options
Diffstat (limited to 'framework/source/uielement/statusbarmanager.cxx')
-rw-r--r-- | framework/source/uielement/statusbarmanager.cxx | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/framework/source/uielement/statusbarmanager.cxx b/framework/source/uielement/statusbarmanager.cxx index d04529352636..f6bfb7eaf03e 100644 --- a/framework/source/uielement/statusbarmanager.cxx +++ b/framework/source/uielement/statusbarmanager.cxx @@ -200,40 +200,39 @@ void SAL_CALL StatusBarManager::dispose() throw( uno::RuntimeException, std::exc { SolarMutexGuard g; - if ( !m_bDisposed ) + if ( m_bDisposed ) + return; + + RemoveControllers(); + + // destroy the item data + for ( sal_uInt16 n = 0; n < m_pStatusBar->GetItemCount(); n++ ) { - RemoveControllers(); + AddonStatusbarItemData *pUserData = static_cast< AddonStatusbarItemData *>( + m_pStatusBar->GetItemData( m_pStatusBar->GetItemId( n ) ) ); + if ( pUserData ) + delete pUserData; + } - // destroy the item data - for ( sal_uInt16 n = 0; n < m_pStatusBar->GetItemCount(); n++ ) + m_pStatusBar.disposeAndClear(); + + if ( m_bFrameActionRegistered && m_xFrame.is() ) + { + try { - AddonStatusbarItemData *pUserData = static_cast< AddonStatusbarItemData *>( - m_pStatusBar->GetItemData( m_pStatusBar->GetItemId( n ) ) ); - if ( pUserData ) - delete pUserData; + m_xFrame->removeFrameActionListener( uno::Reference< frame::XFrameActionListener >( + static_cast< ::cppu::OWeakObject *>( this ), + uno::UNO_QUERY )); } - - delete m_pStatusBar; - m_pStatusBar = 0; - - if ( m_bFrameActionRegistered && m_xFrame.is() ) + catch ( const uno::Exception& ) { - try - { - m_xFrame->removeFrameActionListener( uno::Reference< frame::XFrameActionListener >( - static_cast< ::cppu::OWeakObject *>( this ), - uno::UNO_QUERY )); - } - catch ( const uno::Exception& ) - { - } } + } - m_xFrame.clear(); - m_xContext.clear(); + m_xFrame.clear(); + m_xContext.clear(); - m_bDisposed = true; - } + m_bDisposed = true; } } |