[Libreoffice-commits] core.git: Branch 'feature/SOSAW080' - svx/source sw/source
Armin Le Grand (CIB)
Armin.Le.Grand at cib.de
Mon Mar 19 11:00:38 UTC 2018
svx/source/sdr/properties/attributeproperties.cxx | 24 ++++++++++++++++++++++
svx/source/sdr/properties/defaultproperties.cxx | 8 ++++++-
sw/source/core/doc/doclay.cxx | 4 ++-
3 files changed, 34 insertions(+), 2 deletions(-)
New commits:
commit 1a9dad9bdbe6ee8b81965d9b2c29c3dac5a1a642
Author: Armin Le Grand <Armin.Le.Grand at cib.de (CIB)>
Date: Mon Mar 19 11:58:47 2018 +0100
SOSAW080: Corrected some SdrObject::Clone scenarios
Especially when cloning to another SdrModel and taking
the sdr::properties into account.
Change-Id: Ic366d60299f239e3df856ddffedb19e743e4be0c
diff --git a/svx/source/sdr/properties/attributeproperties.cxx b/svx/source/sdr/properties/attributeproperties.cxx
index b10fcf4bc155..d14b7ffd6b2f 100644
--- a/svx/source/sdr/properties/attributeproperties.cxx
+++ b/svx/source/sdr/properties/attributeproperties.cxx
@@ -177,6 +177,30 @@ namespace sdr
{
SfxStyleSheet* pTargetStyleSheet(rProps.GetStyleSheet());
+ if(pTargetStyleSheet && &rObj.getSdrModelFromSdrObject() != &GetSdrObject().getSdrModelFromSdrObject())
+ {
+ // TTTT It is a clone to another model, thus the TargetStyleSheet
+ // is probably also from another SdrModel, so do *not* simply use it.
+ //
+ // The DefaultProperties::Clone already has cloned the ::SET items
+ // to a new SfxItemSet in the new SfxItemPool. There are quite some
+ // possibilities to continue:
+ // - Do not use StyleSheet (will do this for now)
+ // - Search for same StyleSheet in Target-SdrModel and use if found
+ // (use e.g. Name)
+ // - Clone used StyleSheet(s) to Target-SdrModel and use
+ // - Set all Attributes from the StyleSheet as hard attributes at the
+ // SfxItemSet
+ // The original AW080 uses 'ImpModelChange' (see there) which Clones
+ // and uses the used StyleSheets if there is a Target-SfxItemPool
+ // and sets to hard attributes if not. This may be used later if needed,
+ // but for now only a single UnitTest uses this Clone-scenario and works
+ // well with not using the TargetStyleSheet. The logic Cloning
+ // StyleSheets *should* - if needed - be on a higher level where it is
+ // potentially better known what would be the correct thing to do.
+ pTargetStyleSheet = nullptr;
+ }
+
if(pTargetStyleSheet)
{
if(HasSfxItemSet())
diff --git a/svx/source/sdr/properties/defaultproperties.cxx b/svx/source/sdr/properties/defaultproperties.cxx
index 167e368382c4..15782c100d28 100644
--- a/svx/source/sdr/properties/defaultproperties.cxx
+++ b/svx/source/sdr/properties/defaultproperties.cxx
@@ -56,7 +56,13 @@ namespace sdr
{
if(rProps.mpItemSet)
{
- mpItemSet.reset(rProps.mpItemSet->Clone());
+ // TTTT Clone may be to another model and thus another ItemPool
+ // SfxItemSet supports that thus we are able to Clone all
+ // SfxItemState::SET items to the target pool.
+ mpItemSet.reset(
+ rProps.mpItemSet->Clone(
+ true,
+ &rObj.getSdrModelFromSdrObject().GetItemPool()));
// do not keep parent info, this may be changed by later constructors.
// This class just copies the ItemSet, ignore parent.
diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx
index 3b93cd9735da..4430547b343b 100644
--- a/sw/source/core/doc/doclay.cxx
+++ b/sw/source/core/doc/doclay.cxx
@@ -125,7 +125,9 @@ SdrObject* SwDoc::CloneSdrObj( const SdrObject& rObj, bool bMoveWithinDoc,
getIDocumentDrawModelAccess().GetDrawModel()->InsertPage( pPg );
}
- SdrObject *pObj = rObj.Clone();
+ // TTTT Clone directly to target SdrModel
+ SdrObject *pObj = rObj.Clone(getIDocumentDrawModelAccess().GetDrawModel());
+
if( bMoveWithinDoc && SdrInventor::FmForm == pObj->GetObjInventor() )
{
// We need to preserve the Name for Controls
More information about the Libreoffice-commits
mailing list