sw/inc/calbck.hxx              |    1 -
 sw/inc/hints.hxx               |    4 ++++
 sw/inc/tox.hxx                 |   23 +++++++++++++++--------
 sw/source/core/attr/calbck.cxx |   11 -----------
 sw/source/core/doc/docnew.cxx  |   13 +++----------
 5 files changed, 22 insertions(+), 30 deletions(-)

New commits:
commit dc1b416c684c4e2525978e48252d55d78adcfca8
Author:     Bjoern Michaelsen <bjoern.michael...@libreoffice.org>
AuthorDate: Mon Feb 8 20:21:12 2021 +0100
Commit:     Bjoern Michaelsen <bjoern.michael...@libreoffice.org>
CommitDate: Mon Feb 8 23:05:39 2021 +0100

    Remove SwModify::SetInDocDTOR ...
    
    ... its only used once in SwTOXType and has no place in SwModify, which
    is the base of ~everything in Writer still.
    
    Change-Id: I07007f08723f8db2dd09bb7c07cb0ebfc2a6506a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110594
    Tested-by: Jenkins
    Reviewed-by: Bjoern Michaelsen <bjoern.michael...@libreoffice.org>

diff --git a/sw/inc/calbck.hxx b/sw/inc/calbck.hxx
index 32b0d35b4c1d..0cd8efbee0ed 100644
--- a/sw/inc/calbck.hxx
+++ b/sw/inc/calbck.hxx
@@ -201,7 +201,6 @@ public:
 
     void LockModify()                   { m_bModifyLocked = true;  }
     void UnlockModify()                 { m_bModifyLocked = false; }
-    void SetInDocDTOR();
     bool IsModifyLocked() const     { return m_bModifyLocked;  }
 
     void CheckCaching( const sal_uInt16 nWhich );
diff --git a/sw/inc/hints.hxx b/sw/inc/hints.hxx
index 25fed4c87783..e83d42251882 100644
--- a/sw/inc/hints.hxx
+++ b/sw/inc/hints.hxx
@@ -166,6 +166,10 @@ public:
     const SwTableBox& m_rTableBox;
     MoveTableBoxHint(const SwFrameFormat& rNewFormat, const SwTableBox& 
rTableBox): m_rNewFormat(rNewFormat), m_rTableBox(rTableBox) {};
 };
+
+class DocumentDyingHint final : public SfxHint
+{
+};
 }
 
 class SwUpdateAttr final : public SwMsgPoolItem
diff --git a/sw/inc/tox.hxx b/sw/inc/tox.hxx
index c7bcaacf036a..f1b496091246 100644
--- a/sw/inc/tox.hxx
+++ b/sw/inc/tox.hxx
@@ -19,20 +19,20 @@
 #ifndef INCLUDED_SW_INC_TOX_HXX
 #define INCLUDED_SW_INC_TOX_HXX
 
-#include <cppuhelper/weakref.hxx>
-#include <sal/log.hxx>
+#include <vector>
 
+#include <cppuhelper/weakref.hxx>
+#include <editeng/svxenum.hxx>
 #include <i18nlangtag/lang.h>
-#include <svl/poolitem.hxx>
+#include <o3tl/typed_flags_set.hxx>
+#include <sal/log.hxx>
 #include <svl/listener.hxx>
+#include <svl/poolitem.hxx>
 
-#include <editeng/svxenum.hxx>
+#include "calbck.hxx"
+#include "hints.hxx"
 #include "swtypes.hxx"
 #include "toxe.hxx"
-#include "calbck.hxx"
-#include <o3tl/typed_flags_set.hxx>
-
-#include <vector>
 
 namespace com::sun::star {
     namespace text { class XDocumentIndexMark; }
@@ -467,6 +467,13 @@ public:
     SwTOXBase( const SwTOXBase& rCopy, SwDoc* pDoc = nullptr );
     virtual ~SwTOXBase() override;
 
+    virtual void SwClientNotify(const SwModify& rMod, const SfxHint& rHint) 
override
+    {
+        if(dynamic_cast<const sw::DocumentDyingHint*>(&rHint))
+            GetRegisteredIn()->Remove(this);
+        else
+            SwClient::SwClientNotify(rMod, rHint);
+    }
     // a kind of CopyCtor - check if the TOXBase is at TOXType of the doc.
     // If not, so create it and copy all other used things.
     void                CopyTOXBase( SwDoc*, const SwTOXBase& );
diff --git a/sw/source/core/attr/calbck.cxx b/sw/source/core/attr/calbck.cxx
index 0efc4ada197e..ae840edff48e 100644
--- a/sw/source/core/attr/calbck.cxx
+++ b/sw/source/core/attr/calbck.cxx
@@ -138,17 +138,6 @@ void SwClient::EndListeningAll()
         m_pRegisteredIn->Remove(this);
 }
 
-void SwModify::SetInDocDTOR()
-{
-    // If the document gets destroyed anyway, just tell clients to
-    // forget me so that they don't try to get removed from my list
-    // later when they also get destroyed
-    SwIterator<SwClient,SwModify> aIter(*this);
-    for(SwClient* pClient = aIter.First(); pClient; pClient = aIter.Next())
-        pClient->m_pRegisteredIn = nullptr;
-    m_pWriterListeners = nullptr;
-}
-
 SwModify::~SwModify()
 {
     DBG_TESTSOLARMUTEX();
diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx
index 575980cac40c..9c789deb66b7 100644
--- a/sw/source/core/doc/docnew.cxx
+++ b/sw/source/core/doc/docnew.cxx
@@ -466,16 +466,9 @@ SwDoc::~SwDoc()
         delete pTmp;
     }
 
-    // Old - deletion without a Flag is expensive, because we send a Modify
-    // aTOXTypes.DeleteAndDestroy( 0, aTOXTypes.Count() );
-    {
-        for( auto n = mpTOXTypes->size(); n; )
-        {
-            (*mpTOXTypes)[ --n ]->SetInDocDTOR();
-            (*mpTOXTypes)[ n ].reset();
-        }
-        mpTOXTypes->clear();
-    }
+    for(auto& pType : *mpTOXTypes)
+        pType->CallSwClientNotify(sw::DocumentDyingHint());
+    mpTOXTypes->clear();
     mpDefTOXBases.reset();
 
     // Any of the FrameFormats can still have indices registered.
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to