reduce cost of creating large charts (tdf#144052)

creating a temporary SfxItemSet for each geometry object adds up fast,
so only create the temporary for those SdrTextObj subclasses that need
it.

Change-Id: I0c03a630057718f09c12a4a2d07ad23fca46fd2d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121800
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/include/svx/sdr/properties/defaultproperties.hxx b/include/svx/sdr/properties/defaultproperties.hxx
index e901278..b7e5d70 100644
--- a/include/svx/sdr/properties/defaultproperties.hxx
+++ b/include/svx/sdr/properties/defaultproperties.hxx
@@ -52,7 +52,7 @@
            virtual void PostItemChange(const sal_uInt16 nWhich) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

            // check if SfxItemSet exists
            bool HasSfxItemSet() const { return bool(mxItemSet); }
diff --git a/include/svx/sdr/properties/properties.hxx b/include/svx/sdr/properties/properties.hxx
index 6005229..f27aa5d 100644
--- a/include/svx/sdr/properties/properties.hxx
+++ b/include/svx/sdr/properties/properties.hxx
@@ -104,7 +104,10 @@
            virtual void PostItemChange(const sal_uInt16 nWhich) = 0;

            // Internally react on ItemSet changes. The given ItemSet contains all changed items, the new ones.
            virtual void ItemSetChanged(const SfxItemSet& rSet) = 0;
            virtual void ItemSetChanged(const SfxItemSet*) = 0;
            // Subclasses need to return true if they want the ItemSetChanged() callback to actually have a non-zero pointer.
            // We do this because creating the temporary item set is expensive and seldom used.
            virtual bool WantItemSetInItemSetChanged() const { return false; }

        public:
            // basic constructor, used from SdrObject.
diff --git a/svx/inc/sdr/properties/attributeproperties.hxx b/svx/inc/sdr/properties/attributeproperties.hxx
index 9633257..1aa4572 100644
--- a/svx/inc/sdr/properties/attributeproperties.hxx
+++ b/svx/inc/sdr/properties/attributeproperties.hxx
@@ -49,7 +49,7 @@
            virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = nullptr) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/captionproperties.hxx b/svx/inc/sdr/properties/captionproperties.hxx
index c6f7152..54057fa 100644
--- a/svx/inc/sdr/properties/captionproperties.hxx
+++ b/svx/inc/sdr/properties/captionproperties.hxx
@@ -31,7 +31,7 @@
            virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/circleproperties.hxx b/svx/inc/sdr/properties/circleproperties.hxx
index 2227817..273df7a 100644
--- a/svx/inc/sdr/properties/circleproperties.hxx
+++ b/svx/inc/sdr/properties/circleproperties.hxx
@@ -31,7 +31,7 @@
            virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/connectorproperties.hxx b/svx/inc/sdr/properties/connectorproperties.hxx
index 8d6e14f..cb69b64 100644
--- a/svx/inc/sdr/properties/connectorproperties.hxx
+++ b/svx/inc/sdr/properties/connectorproperties.hxx
@@ -31,7 +31,7 @@
            virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/customshapeproperties.hxx b/svx/inc/sdr/properties/customshapeproperties.hxx
index 8fa29e1..f0af2d5 100644
--- a/svx/inc/sdr/properties/customshapeproperties.hxx
+++ b/svx/inc/sdr/properties/customshapeproperties.hxx
@@ -37,7 +37,7 @@
            virtual bool AllowItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = nullptr) const override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

            // react on Item change
            virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = nullptr) override;
diff --git a/svx/inc/sdr/properties/e3dproperties.hxx b/svx/inc/sdr/properties/e3dproperties.hxx
index cce69e8..5337516 100644
--- a/svx/inc/sdr/properties/e3dproperties.hxx
+++ b/svx/inc/sdr/properties/e3dproperties.hxx
@@ -32,7 +32,7 @@
            virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/emptyproperties.hxx b/svx/inc/sdr/properties/emptyproperties.hxx
index 250c23d..af3b393 100644
--- a/svx/inc/sdr/properties/emptyproperties.hxx
+++ b/svx/inc/sdr/properties/emptyproperties.hxx
@@ -49,7 +49,7 @@
            virtual void PostItemChange(const sal_uInt16 nWhich) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/graphicproperties.hxx b/svx/inc/sdr/properties/graphicproperties.hxx
index 3a424f7..d8419a5 100644
--- a/svx/inc/sdr/properties/graphicproperties.hxx
+++ b/svx/inc/sdr/properties/graphicproperties.hxx
@@ -34,7 +34,7 @@
            virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/groupproperties.hxx b/svx/inc/sdr/properties/groupproperties.hxx
index 32fe503..1496a24 100644
--- a/svx/inc/sdr/properties/groupproperties.hxx
+++ b/svx/inc/sdr/properties/groupproperties.hxx
@@ -40,7 +40,7 @@
            virtual void PostItemChange(const sal_uInt16 nWhich) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/measureproperties.hxx b/svx/inc/sdr/properties/measureproperties.hxx
index 77cb253..0bc4f1d 100644
--- a/svx/inc/sdr/properties/measureproperties.hxx
+++ b/svx/inc/sdr/properties/measureproperties.hxx
@@ -31,7 +31,7 @@
            virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/rectangleproperties.hxx b/svx/inc/sdr/properties/rectangleproperties.hxx
index 1af85d7..823c2a0 100644
--- a/svx/inc/sdr/properties/rectangleproperties.hxx
+++ b/svx/inc/sdr/properties/rectangleproperties.hxx
@@ -29,7 +29,7 @@
        {
        protected:
            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;

        public:
            // basic constructor
diff --git a/svx/inc/sdr/properties/textproperties.hxx b/svx/inc/sdr/properties/textproperties.hxx
index ea587a8..4a6d59f 100644
--- a/svx/inc/sdr/properties/textproperties.hxx
+++ b/svx/inc/sdr/properties/textproperties.hxx
@@ -40,7 +40,8 @@
            virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = nullptr) override;

            // react on ItemSet changes
            virtual void ItemSetChanged(const SfxItemSet& rSet) override;
            virtual void ItemSetChanged(const SfxItemSet*) override;
            virtual bool WantItemSetInItemSetChanged() const override final { return true; }

            /// Get the TextProvider related to our SdrObject
            virtual const svx::ITextProvider& getTextProvider() const;
diff --git a/svx/source/sdr/properties/attributeproperties.cxx b/svx/source/sdr/properties/attributeproperties.cxx
index f24a4b0..b462493 100644
--- a/svx/source/sdr/properties/attributeproperties.cxx
+++ b/svx/source/sdr/properties/attributeproperties.cxx
@@ -276,7 +276,7 @@
            return *mxItemSet;
        }

        void AttributeProperties::ItemSetChanged(const SfxItemSet& /*rSet*/)
        void AttributeProperties::ItemSetChanged(const SfxItemSet* /*pSet*/)
        {
            // own modifications
            SdrObject& rObj = GetSdrObject();
diff --git a/svx/source/sdr/properties/captionproperties.cxx b/svx/source/sdr/properties/captionproperties.cxx
index 8a579a0..ab9b352 100644
--- a/svx/source/sdr/properties/captionproperties.cxx
+++ b/svx/source/sdr/properties/captionproperties.cxx
@@ -62,7 +62,7 @@
            return std::unique_ptr<BaseProperties>(new CaptionProperties(*this, rObj));
        }

        void CaptionProperties::ItemSetChanged(const SfxItemSet& rSet)
        void CaptionProperties::ItemSetChanged(const SfxItemSet* pSet)
        {
            SdrCaptionObj& rObj = static_cast<SdrCaptionObj&>(GetSdrObject());

@@ -70,7 +70,7 @@
            rObj.ImpRecalcTail();

            // call parent
            RectangleProperties::ItemSetChanged(rSet);
            RectangleProperties::ItemSetChanged(pSet);
        }

        void CaptionProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr)
diff --git a/svx/source/sdr/properties/circleproperties.cxx b/svx/source/sdr/properties/circleproperties.cxx
index 058a45e..2d631d0 100644
--- a/svx/source/sdr/properties/circleproperties.cxx
+++ b/svx/source/sdr/properties/circleproperties.cxx
@@ -66,12 +66,12 @@
            return std::unique_ptr<BaseProperties>(new CircleProperties(*this, rObj));
        }

        void CircleProperties::ItemSetChanged(const SfxItemSet& rSet)
        void CircleProperties::ItemSetChanged(const SfxItemSet* pSet)
        {
            SdrCircObj& rObj = static_cast<SdrCircObj&>(GetSdrObject());

            // call parent
            RectangleProperties::ItemSetChanged(rSet);
            RectangleProperties::ItemSetChanged(pSet);

            // local changes
            rObj.ImpSetAttrToCircInfo();
diff --git a/svx/source/sdr/properties/connectorproperties.cxx b/svx/source/sdr/properties/connectorproperties.cxx
index 7da10e2..c8ef783 100644
--- a/svx/source/sdr/properties/connectorproperties.cxx
+++ b/svx/source/sdr/properties/connectorproperties.cxx
@@ -63,12 +63,12 @@
            return std::unique_ptr<BaseProperties>(new ConnectorProperties(*this, rObj));
        }

        void ConnectorProperties::ItemSetChanged(const SfxItemSet& rSet)
        void ConnectorProperties::ItemSetChanged(const SfxItemSet* pSet)
        {
            SdrEdgeObj& rObj = static_cast<SdrEdgeObj&>(GetSdrObject());

            // call parent
            TextProperties::ItemSetChanged(rSet);
            TextProperties::ItemSetChanged(pSet);

            // local changes
            rObj.ImpSetAttrToEdgeInfo();
diff --git a/svx/source/sdr/properties/customshapeproperties.cxx b/svx/source/sdr/properties/customshapeproperties.cxx
index 8b6466c..96db5de 100644
--- a/svx/source/sdr/properties/customshapeproperties.cxx
+++ b/svx/source/sdr/properties/customshapeproperties.cxx
@@ -102,7 +102,7 @@
                    nWhich2 = aIter.NextWhich();
                }
                SfxItemSet aSet(GetSdrObject().GetObjectItemPool());
                ItemSetChanged(aSet);
                ItemSetChanged(&aSet);
            }
            else
                TextProperties::ClearObjectItem( nWhich );
@@ -124,10 +124,10 @@
                TextProperties::ClearObjectItemDirect( nWhich );
        }

        void CustomShapeProperties::ItemSetChanged(const SfxItemSet& rSet)
        void CustomShapeProperties::ItemSetChanged(const SfxItemSet* pSet)
        {
            // call parent
            TextProperties::ItemSetChanged(rSet);
            TextProperties::ItemSetChanged(pSet);

            // update bTextFrame and RenderGeometry
            UpdateTextFrameStatus(true);
diff --git a/svx/source/sdr/properties/defaultproperties.cxx b/svx/source/sdr/properties/defaultproperties.cxx
index 186beba..cd6a00a 100644
--- a/svx/source/sdr/properties/defaultproperties.cxx
+++ b/svx/source/sdr/properties/defaultproperties.cxx
@@ -115,9 +115,14 @@
                ItemChange(nWhichID, &rItem);
                PostItemChange(nWhichID);

                SfxItemSet aSet(GetSdrObject().GetObjectItemPool(), nWhichID, nWhichID);
                aSet.Put(rItem);
                ItemSetChanged(aSet);
                if (WantItemSetInItemSetChanged())
                {
                    SfxItemSet aSet(GetSdrObject().GetObjectItemPool(), nWhichID, nWhichID);
                    aSet.Put(rItem);
                    ItemSetChanged(&aSet);
                }
                else
                    ItemSetChanged(nullptr);
            }
        }

@@ -140,8 +145,13 @@

                if(nWhich)
                {
                    SfxItemSet aSet(GetSdrObject().GetObjectItemPool(), nWhich, nWhich);
                    ItemSetChanged(aSet);
                    if (WantItemSetInItemSetChanged())
                    {
                        SfxItemSet aSet(GetSdrObject().GetObjectItemPool(), nWhich, nWhich);
                        ItemSetChanged(&aSet);
                    }
                    else
                        ItemSetChanged(nullptr);
                }
            }
        }
@@ -176,7 +186,9 @@
            const SfxPoolItem *pPoolItem;
            std::vector< sal_uInt16 > aPostItemChangeList;
            bool bDidChange(false);
            SfxItemSet aSet(GetSdrObject().GetObjectItemPool(), svl::Items<SDRATTR_START, EE_ITEMS_END>);
            std::optional<SfxItemSet> aSet;
            if (WantItemSetInItemSetChanged())
                aSet.emplace(GetSdrObject().GetObjectItemPool(), svl::Items<SDRATTR_START, EE_ITEMS_END>);

            // give a hint to STL_Vector
            aPostItemChangeList.reserve(rSet.Count());
@@ -190,7 +202,8 @@
                        bDidChange = true;
                        ItemChange(nWhich, pPoolItem);
                        aPostItemChangeList.push_back( nWhich );
                        aSet.Put(*pPoolItem);
                        if (aSet)
                            aSet->Put(*pPoolItem);
                    }
                }

@@ -204,11 +217,14 @@
                    PostItemChange(rItem);
                }

                ItemSetChanged(aSet);
                if (aSet)
                    ItemSetChanged(&*aSet);
                else
                    ItemSetChanged(nullptr);
            }
        }

        void DefaultProperties::ItemSetChanged(const SfxItemSet& /*rSet*/)
        void DefaultProperties::ItemSetChanged(const SfxItemSet* /*pSet*/)
        {
        }

diff --git a/svx/source/sdr/properties/e3dproperties.cxx b/svx/source/sdr/properties/e3dproperties.cxx
index 9d291dd..bb99c2d 100644
--- a/svx/source/sdr/properties/e3dproperties.cxx
+++ b/svx/source/sdr/properties/e3dproperties.cxx
@@ -60,12 +60,12 @@
            return std::unique_ptr<BaseProperties>(new E3dProperties(*this, rObj));
        }

        void E3dProperties::ItemSetChanged(const SfxItemSet& rSet)
        void E3dProperties::ItemSetChanged(const SfxItemSet* pSet)
        {
            E3dObject& rObj = static_cast<E3dObject&>(GetSdrObject());

            // call parent
            AttributeProperties::ItemSetChanged(rSet);
            AttributeProperties::ItemSetChanged(pSet);

            // local changes
            rObj.StructureChanged();
diff --git a/svx/source/sdr/properties/emptyproperties.cxx b/svx/source/sdr/properties/emptyproperties.cxx
index 3837b23..ac30ef4 100644
--- a/svx/source/sdr/properties/emptyproperties.cxx
+++ b/svx/source/sdr/properties/emptyproperties.cxx
@@ -82,7 +82,7 @@
            assert(!"EmptyProperties::SetObjectItemSet() should never be called");
        }

        void EmptyProperties::ItemSetChanged(const SfxItemSet& /*rSet*/)
        void EmptyProperties::ItemSetChanged(const SfxItemSet* /*pSet*/)
        {
            assert(!"EmptyProperties::ItemSetChanged() should never be called");
        }
diff --git a/svx/source/sdr/properties/graphicproperties.cxx b/svx/source/sdr/properties/graphicproperties.cxx
index dd59a41..b2be8a9 100644
--- a/svx/source/sdr/properties/graphicproperties.cxx
+++ b/svx/source/sdr/properties/graphicproperties.cxx
@@ -93,7 +93,7 @@
            return std::unique_ptr<BaseProperties>(new GraphicProperties(*this, rObj));
        }

        void GraphicProperties::ItemSetChanged(const SfxItemSet& rSet)
        void GraphicProperties::ItemSetChanged(const SfxItemSet* pSet)
        {
            SdrGrafObj& rObj = static_cast<SdrGrafObj&>(GetSdrObject());

@@ -109,7 +109,7 @@
            rObj.ImpSetAttrToGrafInfo();

            // call parent
            RectangleProperties::ItemSetChanged(rSet);
            RectangleProperties::ItemSetChanged(pSet);
        }

        void GraphicProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr)
diff --git a/svx/source/sdr/properties/groupproperties.cxx b/svx/source/sdr/properties/groupproperties.cxx
index 5f197c4..dd66e88 100644
--- a/svx/source/sdr/properties/groupproperties.cxx
+++ b/svx/source/sdr/properties/groupproperties.cxx
@@ -193,7 +193,7 @@
            assert(!"GroupProperties::SetObjectItemSet() should never be called");
        }

        void GroupProperties::ItemSetChanged(const SfxItemSet& /*rSet*/)
        void GroupProperties::ItemSetChanged(const SfxItemSet* /*pSet*/)
        {
            assert(!"GroupProperties::ItemSetChanged() should never be called");
        }
diff --git a/svx/source/sdr/properties/measureproperties.cxx b/svx/source/sdr/properties/measureproperties.cxx
index 08e2009..64e4fe5 100644
--- a/svx/source/sdr/properties/measureproperties.cxx
+++ b/svx/source/sdr/properties/measureproperties.cxx
@@ -72,12 +72,12 @@
            return std::unique_ptr<BaseProperties>(new MeasureProperties(*this, rObj));
        }

        void MeasureProperties::ItemSetChanged(const SfxItemSet& rSet)
        void MeasureProperties::ItemSetChanged(const SfxItemSet* pSet)
        {
            SdrMeasureObj& rObj = static_cast<SdrMeasureObj&>(GetSdrObject());

            // call parent
            TextProperties::ItemSetChanged(rSet);
            TextProperties::ItemSetChanged(pSet);

            // local changes
            rObj.SetTextDirty();
diff --git a/svx/source/sdr/properties/rectangleproperties.cxx b/svx/source/sdr/properties/rectangleproperties.cxx
index 84b4fc1..894df2a 100644
--- a/svx/source/sdr/properties/rectangleproperties.cxx
+++ b/svx/source/sdr/properties/rectangleproperties.cxx
@@ -42,12 +42,12 @@
            return std::unique_ptr<BaseProperties>(new RectangleProperties(*this, rObj));
        }

        void RectangleProperties::ItemSetChanged(const SfxItemSet& rSet)
        void RectangleProperties::ItemSetChanged(const SfxItemSet* pSet)
        {
            SdrRectObj& rObj = static_cast<SdrRectObj&>(GetSdrObject());

            // call parent
            TextProperties::ItemSetChanged(rSet);
            TextProperties::ItemSetChanged(pSet);

            // local changes
            rObj.SetXPolyDirty();
diff --git a/svx/source/sdr/properties/textproperties.cxx b/svx/source/sdr/properties/textproperties.cxx
index 2ada7eb..77ed512 100644
--- a/svx/source/sdr/properties/textproperties.cxx
+++ b/svx/source/sdr/properties/textproperties.cxx
@@ -81,7 +81,7 @@
            return std::unique_ptr<BaseProperties>(new TextProperties(*this, rObj));
        }

        void TextProperties::ItemSetChanged(const SfxItemSet& rSet)
        void TextProperties::ItemSetChanged(const SfxItemSet* pSet)
        {
            SdrTextObj& rObj = static_cast<SdrTextObj&>(GetSdrObject());

@@ -121,7 +121,7 @@
                    for(sal_Int32 nPara = 0; nPara < nParaCount; nPara++)
                    {
                        SfxItemSet aSet(pOutliner->GetParaAttribs(nPara));
                        aSet.Put(rSet);
                        aSet.Put(*pSet);
                        pOutliner->SetParaAttribs(nPara, aSet);
                    }

@@ -145,7 +145,7 @@
            }

            // Extra-Repaint for radical layout changes (#43139#)
            if(SfxItemState::SET == rSet.GetItemState(SDRATTR_TEXT_CONTOURFRAME))
            if(SfxItemState::SET == pSet->GetItemState(SDRATTR_TEXT_CONTOURFRAME))
            {
                // Here only repaint wanted
                rObj.ActionChanged();
@@ -153,7 +153,7 @@
            }

            // call parent
            AttributeProperties::ItemSetChanged(rSet);
            AttributeProperties::ItemSetChanged(pSet);
        }

        void TextProperties::ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem)
@@ -394,7 +394,7 @@
            // #i61284# push hard ObjectItemSet to OutlinerParaObject attributes
            // using existing functionality
            GetObjectItemSet(); // force ItemSet
            ItemSetChanged(*mxItemSet);
            ItemSetChanged(&*mxItemSet);

            // now the standard TextProperties stuff
            SdrTextObj& rObj = static_cast<SdrTextObj&>(GetSdrObject());
diff --git a/svx/source/table/cell.cxx b/svx/source/table/cell.cxx
index 1b1d74a..427977d 100644
--- a/svx/source/table/cell.cxx
+++ b/svx/source/table/cell.cxx
@@ -166,7 +166,7 @@

            void ForceDefaultAttributes() override;

            void ItemSetChanged(const SfxItemSet& rSet) override;
            void ItemSetChanged(const SfxItemSet*) override;

            void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = nullptr) override;

@@ -222,7 +222,7 @@
        {
        }

        void CellProperties::ItemSetChanged(const SfxItemSet& rSet )
        void CellProperties::ItemSetChanged(const SfxItemSet* pSet )
        {
            SdrTextObj& rObj = static_cast<SdrTextObj&>(GetSdrObject());

@@ -253,12 +253,12 @@
                    // if the user sets character attributes to the complete
                    // cell we want to remove all hard set character attributes
                    // with same which ids from the text
                    std::vector<sal_uInt16> aCharWhichIds(GetAllCharPropIds(rSet));
                    std::vector<sal_uInt16> aCharWhichIds(GetAllCharPropIds(*pSet));

                    for(sal_Int32 nPara = 0; nPara < nParaCount; nPara++)
                    {
                        SfxItemSet aSet(pOutliner->GetParaAttribs(nPara));
                        aSet.Put(rSet);
                        aSet.Put(*pSet);

                        for (const auto& rWhichId : aCharWhichIds)
                        {
@@ -288,7 +288,7 @@
            }

            // call parent
            AttributeProperties::ItemSetChanged(rSet);
            AttributeProperties::ItemSetChanged(pSet);

            if( mxCell.is() )
                mxCell->notifyModified();