diff options
author | Daniel Rentz [dr] <daniel.rentz@oracle.com> | 2010-08-30 14:38:29 +0200 |
---|---|---|
committer | Daniel Rentz [dr] <daniel.rentz@oracle.com> | 2010-08-30 14:38:29 +0200 |
commit | 74c37f3287f6427eba89f108b8365c98ae617b7a (patch) | |
tree | 4aec1a62c88e2d3d7badcd22988f053b43e446f1 | |
parent | c14df458b4b7da8da38e9be28db9122ee8765ad2 (diff) | |
parent | 9e0ef7ed32b5d2e1cdb64e82f329d348ac769fbd (diff) |
mib19: branch merge
-rwxr-xr-x | basic/source/classes/sbunoobj.cxx | 4 | ||||
-rwxr-xr-x | basic/source/classes/sbxmod.cxx | 21 |
2 files changed, 23 insertions, 2 deletions
diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx index 53a7c5c18930..260ef23ca85c 100755 --- a/basic/source/classes/sbunoobj.cxx +++ b/basic/source/classes/sbunoobj.cxx @@ -4458,7 +4458,7 @@ StarBasicDisposeItem* lcl_getOrCreateItemForBasic( StarBASIC* pBasic ) return pItem; } -void lcl_registerComponentToBeDisposedForBasic +void registerComponentToBeDisposedForBasic ( Reference< XComponent > xComponent, StarBASIC* pBasic ) { StarBasicDisposeItem* pItem = lcl_getOrCreateItemForBasic( pBasic ); @@ -4573,7 +4573,7 @@ bool SbModule::createCOMWrapperForIface( Any& o_rRetAny, SbClassModuleObject* pP while( pParentBasic == NULL && pCurObject != NULL ); OSL_ASSERT( pParentBasic != NULL ); - lcl_registerComponentToBeDisposedForBasic( xComponent, pParentBasic ); + registerComponentToBeDisposedForBasic( xComponent, pParentBasic ); } o_rRetAny <<= xRet; diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx index 46a1488844c1..6a2380acedcd 100755 --- a/basic/source/classes/sbxmod.cxx +++ b/basic/source/classes/sbxmod.cxx @@ -2494,6 +2494,8 @@ void SbUserFormModule::Unload() } //liuchen +void registerComponentToBeDisposedForBasic( Reference< XComponent > xComponent, StarBASIC* pBasic ); + void SbUserFormModule::InitObject() { try @@ -2525,6 +2527,25 @@ void SbUserFormModule::InitObject() aArgs[ 3 ] <<= rtl::OUString( GetParent()->GetName() ); pDocObject = new SbUnoObject( GetName(), uno::makeAny( xVBAFactory->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.msforms.UserForm")), aArgs ) ) ); uno::Reference< lang::XComponent > xComponent( aArgs[ 1 ], uno::UNO_QUERY_THROW ); + + // the dialog must be disposed at the end! + if( xComponent.is() ) + { + StarBASIC* pParentBasic = NULL; + SbxObject* pCurObject = this; + do + { + SbxObject* pParent = pCurObject->GetParent(); + pParentBasic = PTR_CAST(StarBASIC,pParent); + pCurObject = pParent; + } + while( pParentBasic == NULL && pCurObject != NULL ); + + OSL_ASSERT( pParentBasic != NULL ); + registerComponentToBeDisposedForBasic( xComponent, pParentBasic ); + } + + // remove old listener if it exists if ( m_DialogListener.get() ) m_DialogListener->removeListener(); |