svx/source/sdr/properties/textproperties.cxx |   60 ++++++++++++---------------
 1 file changed, 27 insertions(+), 33 deletions(-)

New commits:
commit 3b784236d7c3bf386deeeadcf79d9e9b289bf991
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Mar 6 14:12:51 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Mar 6 19:58:47 2024 +0100

    tdf#158773 reduce cost of TextProperties::Notify
    
    Shaves 30% off the load time here, by re-arranging the logic so we do th
    expensive dynamic_cast less often
    
    Change-Id: If7a1605994e620dbdb61010506c624cc738359a4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164466
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/svx/source/sdr/properties/textproperties.cxx 
b/svx/source/sdr/properties/textproperties.cxx
index 55b366bdc03b..17f63d044dcf 100644
--- a/svx/source/sdr/properties/textproperties.cxx
+++ b/svx/source/sdr/properties/textproperties.cxx
@@ -554,50 +554,44 @@ namespace sdr::properties
             if(!rObj.HasText())
                 return;
 
+            SfxHintId nId(rHint.GetId());
             const svx::ITextProvider& rTextProvider(getTextProvider());
-            if(dynamic_cast<const SfxStyleSheet *>(&rBC) != nullptr)
-            {
-                SfxHintId nId(rHint.GetId());
 
-                if(SfxHintId::DataChanged == nId)
+            if(SfxHintId::DataChanged == nId && dynamic_cast<const 
SfxStyleSheet *>(&rBC) != nullptr)
+            {
+                sal_Int32 nText = rTextProvider.getTextCount();
+                while (nText--)
                 {
-                    sal_Int32 nText = rTextProvider.getTextCount();
-                    while (nText--)
-                    {
-                        OutlinerParaObject* pParaObj = rTextProvider.getText( 
nText )->GetOutlinerParaObject();
-                        if( pParaObj )
-                            pParaObj->ClearPortionInfo();
-                    }
-                    rObj.SetTextSizeDirty();
-
-                    if(rObj.IsTextFrame() && 
rObj.NbcAdjustTextFrameWidthAndHeight())
-                    {
-                        // here only repaint wanted
-                        rObj.ActionChanged();
-                        //rObj.BroadcastObjectChange();
-                    }
+                    OutlinerParaObject* pParaObj = rTextProvider.getText( 
nText )->GetOutlinerParaObject();
+                    if( pParaObj )
+                        pParaObj->ClearPortionInfo();
+                }
+                rObj.SetTextSizeDirty();
 
-                    // #i101556# content of StyleSheet has changed -> new 
version
-                    maVersion++;
+                if(rObj.IsTextFrame() && 
rObj.NbcAdjustTextFrameWidthAndHeight())
+                {
+                    // here only repaint wanted
+                    rObj.ActionChanged();
+                    //rObj.BroadcastObjectChange();
                 }
 
-                if(SfxHintId::Dying == nId)
+                // #i101556# content of StyleSheet has changed -> new version
+                maVersion++;
+            }
+            else if(SfxHintId::Dying == nId && dynamic_cast<const 
SfxStyleSheet *>(&rBC) != nullptr)
+            {
+                sal_Int32 nText = rTextProvider.getTextCount();
+                while (nText--)
                 {
-                    sal_Int32 nText = rTextProvider.getTextCount();
-                    while (nText--)
-                    {
-                        OutlinerParaObject* pParaObj = rTextProvider.getText( 
nText )->GetOutlinerParaObject();
-                        if( pParaObj )
-                            pParaObj->ClearPortionInfo();
-                    }
+                    OutlinerParaObject* pParaObj = rTextProvider.getText( 
nText )->GetOutlinerParaObject();
+                    if( pParaObj )
+                        pParaObj->ClearPortionInfo();
                 }
             }
-            else if(dynamic_cast<const SfxStyleSheetBasePool *>(&rBC) != 
nullptr)
+            else if (nId == SfxHintId::StyleSheetModified && 
dynamic_cast<const SfxStyleSheetBasePool *>(&rBC) != nullptr)
             {
                 const SfxStyleSheetModifiedHint* pExtendedHint = 
dynamic_cast<const SfxStyleSheetModifiedHint*>(&rHint);
-
-                if(pExtendedHint
-                    && SfxHintId::StyleSheetModified == pExtendedHint->GetId())
+                if (pExtendedHint)
                 {
                     const OUString& aOldName(pExtendedHint->GetOldName());
                     OUString 
aNewName(pExtendedHint->GetStyleSheet()->GetName());

Reply via email to