diff options
author | Mikhail Voitenko <mav@openoffice.org> | 2003-11-17 15:19:26 +0000 |
---|---|---|
committer | Mikhail Voitenko <mav@openoffice.org> | 2003-11-17 15:19:26 +0000 |
commit | 63624caf55e8a6c24074b9cb7bba7dfe6b8173c1 (patch) | |
tree | 730b1a868d52f51b91d76adc11607bff92d9a25b /embeddedobj/source/msole/olecomponent.cxx | |
parent | 445354694b6e8e277183fd6a9c5ba3e7efb5a7d8 (diff) |
#112923# XCloseable support
Diffstat (limited to 'embeddedobj/source/msole/olecomponent.cxx')
-rw-r--r-- | embeddedobj/source/msole/olecomponent.cxx | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/embeddedobj/source/msole/olecomponent.cxx b/embeddedobj/source/msole/olecomponent.cxx index 80a4cd55f8e5..d1116b35bf51 100644 --- a/embeddedobj/source/msole/olecomponent.cxx +++ b/embeddedobj/source/msole/olecomponent.cxx @@ -2,9 +2,9 @@ * * $RCSfile: olecomponent.cxx,v $ * - * $Revision: 1.2 $ + * $Revision: 1.3 $ * - * last change: $Author: mav $ $Date: 2003-11-14 15:24:27 $ + * last change: $Author: mav $ $Date: 2003-11-17 16:19:24 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -331,12 +331,23 @@ OleComponent::OleComponent( const uno::Reference< lang::XMultiServiceFactory >& //---------------------------------------------- OleComponent::~OleComponent() { - if ( m_pOleWrapClientSite ) + OSL_ENSURE( !m_pOleWrapClientSite && !m_pImplAdviseSink && !m_pInterfaceContainer && !m_bOleInitialized, + "The object was not closed successfully! DISASTER is possible!" ); + + if ( m_pOleWrapClientSite || m_pImplAdviseSink || m_pInterfaceContainer || m_bOleInitialized ) { - // must be done on close() - // here it means an error - OSL_ENSURE( sal_False, "Looks like the object was not closed before destruction - DISASTER is possible!" ); + m_refCount++; + try { + Dispose(); + } catch( uno::Exception& ) {} + } +} +//---------------------------------------------- +void OleComponent::Dispose() +{ + if ( m_pOleWrapClientSite ) + { m_pOleWrapClientSite->disconnectOleComponent(); m_pOleWrapClientSite->Release(); m_pOleWrapClientSite = NULL; @@ -344,10 +355,6 @@ OleComponent::~OleComponent() if ( m_pImplAdviseSink ) { - // must be done on close() - // here it means an error - OSL_ENSURE( sal_False, "Looks like the object was not closed before destruction - DISASTER is possible!" ); - m_pImplAdviseSink->disconnectOleComponent(); m_pImplAdviseSink->Release(); m_pImplAdviseSink = NULL; @@ -355,12 +362,20 @@ OleComponent::~OleComponent() if ( m_pInterfaceContainer ) { + lang::EventObject aEvent( (embed::XEmbeddedObject*)this ); + m_pInterfaceContainer->disposeAndClear( aEvent ); + delete m_pInterfaceContainer; m_pInterfaceContainer = NULL; } if ( m_bOleInitialized ) + { OleUninitialize(); + m_bOleInitialized = sal_False; + } + + m_bDisposed = sal_True; } //---------------------------------------------- @@ -956,9 +971,9 @@ void SAL_CALL OleComponent::close( sal_Bool bDeliverOwnership ) } } } - - m_pInterfaceContainer->disposeAndClear( aSource ); } + + Dispose(); } //---------------------------------------------- |