summaryrefslogtreecommitdiff
path: root/toolkit/source/controls
diff options
context:
space:
mode:
authorFrank Schönheit <fs@openoffice.org>2002-01-08 12:57:50 +0000
committerFrank Schönheit <fs@openoffice.org>2002-01-08 12:57:50 +0000
commite738f04d31b0e4cbdf6e1d67d2f45ed559c21b4b (patch)
tree464698748b3b5f70c87906f8e5966e527a1431b0 /toolkit/source/controls
parenta31add1e1e6ce0b702ece4aeb3c176a39d987b4e (diff)
#96008# UnoControl::disposing( EventObject ): reset the model only _after_ xThis has been disposed - this is important, as our own dispose still needs the model for removing itself as listener
Diffstat (limited to 'toolkit/source/controls')
-rw-r--r--toolkit/source/controls/unocontrol.cxx27
1 files changed, 14 insertions, 13 deletions
diff --git a/toolkit/source/controls/unocontrol.cxx b/toolkit/source/controls/unocontrol.cxx
index 614a9f5a6e62..535028b15547 100644
--- a/toolkit/source/controls/unocontrol.cxx
+++ b/toolkit/source/controls/unocontrol.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: unocontrol.cxx,v $
*
- * $Revision: 1.15 $
+ * $Revision: 1.16 $
*
- * last change: $Author: mt $ $Date: 2001-09-04 06:05:18 $
+ * last change: $Author: fs $ $Date: 2002-01-08 13:57:50 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -330,16 +330,16 @@ void UnoControl::dispose( ) throw(RuntimeException)
mxPeer = NULL;
}
- EventObject aEvt;
- aEvt.Source = (XAggregation*)(::cppu::OWeakAggObject*)this;
+ EventObject aDisposeEvent;
+ aDisposeEvent.Source = static_cast< XAggregation* >( this );
- maDisposeListeners.disposeAndClear(aEvt);
- maWindowListeners.disposeAndClear(aEvt);
- maFocusListeners.disposeAndClear(aEvt);
- maKeyListeners.disposeAndClear(aEvt);
- maMouseListeners.disposeAndClear(aEvt);
- maMouseMotionListeners.disposeAndClear(aEvt);
- maPaintListeners.disposeAndClear(aEvt);
+ maDisposeListeners.disposeAndClear( aDisposeEvent );
+ maWindowListeners.disposeAndClear( aDisposeEvent );
+ maFocusListeners.disposeAndClear( aDisposeEvent );
+ maKeyListeners.disposeAndClear( aDisposeEvent );
+ maMouseListeners.disposeAndClear( aDisposeEvent );
+ maMouseMotionListeners.disposeAndClear( aDisposeEvent );
+ maPaintListeners.disposeAndClear( aDisposeEvent );
// Model wieder freigeben
setModel( Reference< XControlModel > () );
@@ -466,11 +466,12 @@ void UnoControl::disposing( const EventObject& rEvt ) throw(RuntimeException)
if( mxModel == rEvt.Source )
{
- mxModel = NULL;
-
// #62337# Ohne Model wollen wir nicht weiterleben
Reference< XControl > xThis = this;
xThis->dispose();
+
+ DBG_ASSERT( !mxModel.is(), "UnoControl::disposing: invalid dispose behaviour!" );
+ mxModel.clear();
}
}