summaryrefslogtreecommitdiff
path: root/package
diff options
context:
space:
mode:
authorKurt Zenker <kz@openoffice.org>2005-07-12 11:30:40 +0000
committerKurt Zenker <kz@openoffice.org>2005-07-12 11:30:40 +0000
commita1323b2dca57875103aea1d81fc6b943bbdb4a95 (patch)
treef53ee377653037f8a580029dbd506189a334c9f9 /package
parent86419b9a9743443abe92335716bdb8f6ab9a81a9 (diff)
INTEGRATION: CWS mav18 (1.17.16); FILE MERGED
2005/05/27 14:52:19 mav 1.17.16.1: #i49755# fix incoplete commit problem
Diffstat (limited to 'package')
-rw-r--r--package/source/xstor/xstorage.cxx24
1 files changed, 14 insertions, 10 deletions
diff --git a/package/source/xstor/xstorage.cxx b/package/source/xstor/xstorage.cxx
index 84713a071752..2b3708404486 100644
--- a/package/source/xstor/xstorage.cxx
+++ b/package/source/xstor/xstorage.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: xstorage.cxx,v $
*
- * $Revision: 1.17 $
+ * $Revision: 1.18 $
*
- * last change: $Author: vg $ $Date: 2005-02-25 09:37:58 $
+ * last change: $Author: kz $ $Date: 2005-07-12 12:30:40 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -455,7 +455,7 @@ void OStorage_Impl::OpenOwnPackage()
{
if ( !m_xPackage.is() )
{
- uno::Sequence< uno::Any > aArguments( 1 );
+ uno::Sequence< uno::Any > aArguments( 2 );
if ( m_nStorageMode & embed::ElementModes::WRITE )
aArguments[ 0 ] <<= m_xStream;
else
@@ -466,7 +466,11 @@ void OStorage_Impl::OpenOwnPackage()
// on XStream object a wrapper must be used
}
- sal_Int32 nArgNum = 1;
+ // do not allow elements to remove themself from the old container in case of insertion to another container
+ aArguments[ 1 ] <<= beans::NamedValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AllowRemoveOnInsert" ) ),
+ uno::makeAny( (sal_Bool)sal_False ) );
+
+ sal_Int32 nArgNum = 2;
for ( sal_Int32 aInd = 0; aInd < m_xProperties.getLength(); aInd++ )
{
if ( m_xProperties[aInd].Name.equalsAscii( "RepairPackage" )
@@ -887,19 +891,19 @@ void OStorage_Impl::Commit()
else if ( !m_bCommited && !m_bIsRoot )
{
// the element must be just copied to the new temporary package folder
+ // the connection with the original package should not be lost just because
+ // the element is still refered by the folder in the original hierarchy
uno::Any aPackageElement = m_xPackageFolder->getByName( (*pElementIter)->m_aOriginalName );
xNewPackageFolder->insertByName( (*pElementIter)->m_aName, aPackageElement );
}
else if ( (*pElementIter)->m_aName.compareTo( (*pElementIter)->m_aOriginalName ) )
{
+ // this is the case when xNewPackageFolder refers to m_xPackageFolder
// in case the name was changed and it is not a changed storage - rename the element
uno::Reference< container::XNamed > xNamed;
- uno::Any aPackageElement = m_xPackageFolder->getByName( (*pElementIter)->m_aOriginalName );
-
- aPackageElement >>= xNamed;
- OSL_ENSURE( xNamed.is(), "PackageFolder/PackageStream MUST support XNamed interface" );
-
- xNamed->setName( (*pElementIter)->m_aName );
+ uno::Any aPackageElement = xNewPackageFolder->getByName( (*pElementIter)->m_aOriginalName );
+ xNewPackageFolder->removeByName( (*pElementIter)->m_aOriginalName );
+ xNewPackageFolder->insertByName( (*pElementIter)->m_aName, aPackageElement );
}
(*pElementIter)->m_aOriginalName = (*pElementIter)->m_aName;