[Libreoffice-commits] core.git: sw/inc sw/source

Bjoern Michaelsen (via logerrit) logerrit at kemper.freedesktop.org
Fri Jul 9 21:29:16 UTC 2021


 sw/inc/hints.hxx                 |    9 ++++++++
 sw/source/core/layout/tabfrm.cxx |   25 +++++++++++++++++++++++-
 sw/source/core/table/swtable.cxx |   40 +++++----------------------------------
 3 files changed, 39 insertions(+), 35 deletions(-)

New commits:
commit 56d7965b6c24915359f39f45f1696c6f1dc3d3c9
Author:     Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
AuthorDate: Mon Jul 5 02:34:18 2021 +0200
Commit:     Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
CommitDate: Fri Jul 9 23:28:43 2021 +0200

    Remove some iterator abuse
    
    Change-Id: I9279a1729e1715ac44c600c930f50c6e8704e676
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118393
    Tested-by: Jenkins
    Reviewed-by: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>

diff --git a/sw/inc/hints.hxx b/sw/inc/hints.hxx
index 8f978d886c2a..afaf1d9022d9 100644
--- a/sw/inc/hints.hxx
+++ b/sw/inc/hints.hxx
@@ -34,6 +34,8 @@ class SwHistory;
 class SwTextNode;
 class SwTextFormatColl;
 class SwFrameFormat;
+class SwTableBox;
+class SwTableBoxFormat;
 class SwTableLine;
 class SwTableLineFormat;
 class SwTableBox;
@@ -179,6 +181,13 @@ public:
     const SwTableLine& m_rTabLine;
     TableLineFormatChanged(const SwTableLineFormat& rNewFormat, const SwTableLine& rTabLine) : m_rNewFormat(rNewFormat), m_rTabLine(rTabLine) {};
 };
+class TableBoxFormatChanged final : public SfxHint
+{
+public:
+    const SwTableBoxFormat& m_rNewFormat;
+    const SwTableBox& m_rTableBox;
+    TableBoxFormatChanged(const SwTableBoxFormat& rNewFormat, const SwTableBox& rTableBox) : m_rNewFormat(rNewFormat), m_rTableBox(rTableBox) {};
+};
 }
 
 class SwUpdateAttr final : public SwMsgPoolItem
diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index c50f4d4873eb..36c5ba5faf1e 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -5459,7 +5459,30 @@ void SwCellFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorder
 
 void SwCellFrame::SwClientNotify(const SwModify& rMod, const SfxHint& rHint)
 {
-    if(auto pMoveTableBoxHint = dynamic_cast<const sw::MoveTableBoxHint*>(&rHint))
+    if(auto pNewFormatHint = dynamic_cast<const sw::TableBoxFormatChanged*>(&rHint))
+    {
+        if(GetTabBox() != &pNewFormatHint->m_rTableBox)
+            return;
+        RegisterToFormat(const_cast<SwTableBoxFormat&>(pNewFormatHint->m_rNewFormat));
+        InvalidateSize();
+        InvalidatePrt_();
+        SetCompletePaint();
+        SetDerivedVert(false);
+        CheckDirChange();
+
+        // #i47489#
+        // make sure that the row will be formatted, in order
+        // to have the correct Get(Top|Bottom)MarginForLowers values
+        // set at the row.
+        const SwTabFrame* pTab = FindTabFrame();
+        if(pTab && pTab->IsCollapsingBorders())
+        {
+            SwFrame* pRow = GetUpper();
+            pRow->InvalidateSize_();
+            pRow->InvalidatePrt_();
+        }
+    }
+    else if(auto pMoveTableBoxHint = dynamic_cast<const sw::MoveTableBoxHint*>(&rHint))
     {
         if(GetTabBox() != &pMoveTableBoxHint->m_rTableBox)
             return;
diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx
index fe6a221daa0c..1da79f960545 100644
--- a/sw/source/core/table/swtable.cxx
+++ b/sw/source/core/table/swtable.cxx
@@ -1689,45 +1689,17 @@ SwFrameFormat* SwTableBox::ClaimFrameFormat()
     return pRet;
 }
 
-void SwTableBox::ChgFrameFormat( SwTableBoxFormat* pNewFormat, bool bNeedToReregister )
+void SwTableBox::ChgFrameFormat(SwTableBoxFormat* pNewFormat, bool bNeedToReregister)
 {
-    SwFrameFormat *pOld = GetFrameFormat();
-    SwIterator<SwCellFrame,SwFormat> aIter( *pOld );
-
+    SwFrameFormat* pOld = GetFrameFormat();
     // tdf#84635 We set bNeedToReregister=false to avoid a quadratic slowdown on loading large tables,
     // and since we are creating the table for the first time, no re-registration is necessary.
-
     // First, re-register the Frames.
-    if (bNeedToReregister)
-        for( SwCellFrame* pCell = aIter.First(); pCell; pCell = aIter.Next() )
-        {
-            if( pCell->GetTabBox() == this )
-            {
-                pCell->RegisterToFormat( *pNewFormat );
-                pCell->InvalidateSize();
-                pCell->InvalidatePrt_();
-                pCell->SetCompletePaint();
-                pCell->SetDerivedVert( false );
-                pCell->CheckDirChange();
-
-                // #i47489#
-                // make sure that the row will be formatted, in order
-                // to have the correct Get(Top|Bottom)MarginForLowers values
-                // set at the row.
-                const SwTabFrame* pTab = pCell->FindTabFrame();
-                if ( pTab && pTab->IsCollapsingBorders() )
-                {
-                    SwFrame* pRow = pCell->GetUpper();
-                    pRow->InvalidateSize_();
-                    pRow->InvalidatePrt_();
-                }
-            }
-        }
-
+    if(bNeedToReregister)
+        pOld->CallSwClientNotify(sw::TableBoxFormatChanged(*pNewFormat, *this));
     // Now, re-register self.
-    pNewFormat->Add( this );
-
-    if( !pOld->HasWriterListeners() )
+    pNewFormat->Add(this);
+    if(!pOld->HasWriterListeners())
         delete pOld;
 }
 


More information about the Libreoffice-commits mailing list