summaryrefslogtreecommitdiff
path: root/embeddedobj/source/msole/olecomponent.cxx
diff options
context:
space:
mode:
authorMikhail Voitenko <mav@openoffice.org>2003-11-17 15:19:26 +0000
committerMikhail Voitenko <mav@openoffice.org>2003-11-17 15:19:26 +0000
commit63624caf55e8a6c24074b9cb7bba7dfe6b8173c1 (patch)
tree730b1a868d52f51b91d76adc11607bff92d9a25b /embeddedobj/source/msole/olecomponent.cxx
parent445354694b6e8e277183fd6a9c5ba3e7efb5a7d8 (diff)
#112923# XCloseable support
Diffstat (limited to 'embeddedobj/source/msole/olecomponent.cxx')
-rw-r--r--embeddedobj/source/msole/olecomponent.cxx39
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();
}
//----------------------------------------------