diff --git a/sd/qa/unit/data/xml/fdo71434_0.xml b/sd/qa/unit/data/xml/fdo71434_0.xml index 5c58fa290095..0ec2570dcb7e 100644 --- a/sd/qa/unit/data/xml/fdo71434_0.xml +++ b/sd/qa/unit/data/xml/fdo71434_0.xml @@ -1,6 +1,6 @@ - + diff --git a/sd/qa/unit/data/xml/tdf100491_0.xml b/sd/qa/unit/data/xml/tdf100491_0.xml index 7e9c39007f0a..0c250e6fc840 100755 --- a/sd/qa/unit/data/xml/tdf100491_0.xml +++ b/sd/qa/unit/data/xml/tdf100491_0.xml @@ -1,6 +1,6 @@ - + @@ -35,7 +35,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -105,7 +105,7 @@ - + @@ -140,7 +140,7 @@ - + @@ -175,7 +175,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -245,7 +245,7 @@ - + @@ -280,7 +280,7 @@ - + @@ -315,7 +315,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -385,7 +385,7 @@ - + @@ -420,7 +420,7 @@ - + @@ -455,7 +455,7 @@ - + @@ -490,7 +490,7 @@ - + @@ -525,7 +525,7 @@ - + diff --git a/svx/source/sdr/properties/attributeproperties.cxx b/svx/source/sdr/properties/attributeproperties.cxx index 4e8711341b82..4089438d959e 100644 --- a/svx/source/sdr/properties/attributeproperties.cxx +++ b/svx/source/sdr/properties/attributeproperties.cxx @@ -233,35 +233,42 @@ namespace sdr // remember if we had a SfxItemSet already const bool bHadSfxItemSet(HasSfxItemSet()); - // call parent - this will then guarantee - // SfxItemSet existence + // call parent - this will guarantee SfxItemSet existence DefaultProperties::GetObjectItemSet(); if(!bHadSfxItemSet) { - // SfxItemSet was created and ForceDefaultAttributes() is done. - // We now need to set a default SfxStyleSheet at the SdrObject. This - // is possible now since we always have the SdrModel in SdrObject, - // so use applyDefaultStyleSheetFromSdrModel() which will do the - // right thing in each derivation of BaseProperties. - // We also need to 'rescue' mpStyleSheet if it is already set, - // which means a SfxStyleSheet was already set/ocopied but not - // yet set at the SdrObject. See copy-constructor and how it remembers - // the SfxStyleSheet there. This time, do not reset the - // attributes already set - this is done above. - SfxStyleSheet* pImplicitelyAlreadySet(mpStyleSheet); - - // Set missing defaults and do RemoveHardAttributes. This is - // important, it deletes again the attributes set in - // ForceDefaultAttributes() which are set in the default - // SfxStyleSheet. - const_cast< AttributeProperties* >(this)->applyDefaultStyleSheetFromSdrModel(); - - if(pImplicitelyAlreadySet) + // need to take care for SfxStyleSheet for newly + // created SfxItemSet + if(nullptr == mpStyleSheet) + { + // Set missing defaults without removal of hard attributes. + // This is more complicated historically than I first thought: + // Originally for GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj + // SetStyleSheet(..., false) was used, while for GetDefaultStyleSheet + // SetStyleSheet(..., true) was used. Thus, for SdrGrafObj and SdrOle2Obj + // bDontRemoveHardAttr == false -> *do* delete hard attributes was used. + // This was probably not done by purpose, adding the method + // GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj additionally to + // GetDefaultStyleSheet was an enhancement to allow for SdrGrafObj/SdrOle2Obj + // with full AttributeSet (adding e.g. FillAttributes). To stay as compatible + // as possible these SdrObjects got a new default-StyleSheet. + // There is no reason to delete the HardAttributes and it anyways has only + // AFAIK effects on a single Item - the SdrTextHorzAdjustItem. To get things + // unified I will stay with not deleting the HardAttributes and adapt the + // UnitTests in CppunitTest_sd_import_tests accordingly. + const_cast< AttributeProperties* >(this)->applyDefaultStyleSheetFromSdrModel(); + } + else { // Late-Init of setting parent to SfxStyleSheet after - // it's creation. - const_cast< AttributeProperties* >(this)->SetStyleSheet(pImplicitelyAlreadySet, true); + // it's creation. Can only happen from copy-constructor + // (where creation of SfxItemSet is avoided due to the + // problem with constructors and virtual functions in C++), + // thus DontRemoveHardAttr is not needed. + const_cast< AttributeProperties* >(this)->SetStyleSheet( + mpStyleSheet, + true); } } @@ -326,11 +333,8 @@ namespace sdr } } - // set item - if(!HasSfxItemSet()) - { - GetObjectItemSet(); - } + // guarantee SfxItemSet existence + GetObjectItemSet(); if(pResultItem) { @@ -357,11 +361,8 @@ namespace sdr void AttributeProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr) { - // guarantee SfxItemSet existence here - if(!HasSfxItemSet()) - { - GetObjectItemSet(); - } + // guarantee SfxItemSet existence + GetObjectItemSet(); ImpRemoveStyleSheet(); ImpAddStyleSheet(pNewStyleSheet, bDontRemoveHardAttr); @@ -381,11 +382,8 @@ namespace sdr if(!GetStyleSheet() || dynamic_cast(mpStyleSheet) == nullptr) return; - // force SfxItemSet existence - if(!HasSfxItemSet()) - { - GetObjectItemSet(); - } + // guarantee SfxItemSet existence + GetObjectItemSet(); // prepare copied, new itemset, but WITHOUT parent SfxItemSet* pDestItemSet = new SfxItemSet(*mpItemSet); diff --git a/svx/source/sdr/properties/graphicproperties.cxx b/svx/source/sdr/properties/graphicproperties.cxx index 2c606b80d433..9097857b2827 100644 --- a/svx/source/sdr/properties/graphicproperties.cxx +++ b/svx/source/sdr/properties/graphicproperties.cxx @@ -39,7 +39,8 @@ namespace sdr if(pStyleSheet) { - SetStyleSheet(pStyleSheet, false); + // do not delete hard attributes when setting dsefault Style + SetStyleSheet(pStyleSheet, true); } else { diff --git a/svx/source/sdr/properties/oleproperties.cxx b/svx/source/sdr/properties/oleproperties.cxx index 096e3e2ec71f..a2a8773987ea 100644 --- a/svx/source/sdr/properties/oleproperties.cxx +++ b/svx/source/sdr/properties/oleproperties.cxx @@ -34,7 +34,8 @@ namespace sdr if(pStyleSheet) { - SetStyleSheet(pStyleSheet, false); + // do not delete hard attributes when setting dsefault Style + SetStyleSheet(pStyleSheet, true); } else { diff --git a/svx/source/sdr/properties/properties.cxx b/svx/source/sdr/properties/properties.cxx index 9670c743722f..bdeeeeaaec8d 100644 --- a/svx/source/sdr/properties/properties.cxx +++ b/svx/source/sdr/properties/properties.cxx @@ -43,7 +43,8 @@ namespace sdr void BaseProperties::applyDefaultStyleSheetFromSdrModel() { - SetStyleSheet(GetSdrObject().getSdrModelFromSdrObject().GetDefaultStyleSheet(), false); + // do not delete hard attributes when setting dsefault Style + SetStyleSheet(GetSdrObject().getSdrModelFromSdrObject().GetDefaultStyleSheet(), true); } const SdrObject& BaseProperties::GetSdrObject() const