diff options
author | Frank Schönheit <fs@openoffice.org> | 2002-01-08 12:57:50 +0000 |
---|---|---|
committer | Frank Schönheit <fs@openoffice.org> | 2002-01-08 12:57:50 +0000 |
commit | e738f04d31b0e4cbdf6e1d67d2f45ed559c21b4b (patch) | |
tree | 464698748b3b5f70c87906f8e5966e527a1431b0 /toolkit | |
parent | a31add1e1e6ce0b702ece4aeb3c176a39d987b4e (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')
-rw-r--r-- | toolkit/source/controls/unocontrol.cxx | 27 |
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(); } } |