summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Rentz [dr] <daniel.rentz@oracle.com>2010-08-30 14:38:29 +0200
committerDaniel Rentz [dr] <daniel.rentz@oracle.com>2010-08-30 14:38:29 +0200
commit74c37f3287f6427eba89f108b8365c98ae617b7a (patch)
tree4aec1a62c88e2d3d7badcd22988f053b43e446f1
parentc14df458b4b7da8da38e9be28db9122ee8765ad2 (diff)
parent9e0ef7ed32b5d2e1cdb64e82f329d348ac769fbd (diff)
mib19: branch merge
-rwxr-xr-xbasic/source/classes/sbunoobj.cxx4
-rwxr-xr-xbasic/source/classes/sbxmod.cxx21
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();