include/svl/hint.hxx                     |    1 +
 sw/inc/calbck.hxx                        |    2 +-
 sw/inc/swevent.hxx                       |    4 ++--
 sw/source/core/access/accframebase.cxx   |    3 ++-
 sw/source/core/access/accnotextframe.cxx |    3 ++-
 sw/source/core/access/acctable.cxx       |    3 ++-
 sw/source/core/access/acctextframe.cxx   |    3 ++-
 sw/source/core/attr/calbck.cxx           |   27 +++++++++++++++------------
 sw/source/core/attr/format.cxx           |    4 ++--
 sw/source/core/crsr/bookmrk.cxx          |    6 ++++--
 sw/source/core/crsr/crsrsh.cxx           |    4 ++--
 sw/source/core/doc/acmplwrd.cxx          |    4 ++--
 sw/source/core/doc/docftn.cxx            |    3 ++-
 sw/source/core/doc/fmtcol.cxx            |    6 +++---
 sw/source/core/doc/lineinfo.cxx          |    4 ++--
 sw/source/core/doc/notxtfrm.cxx          |    4 ++--
 sw/source/core/doc/number.cxx            |    4 ++--
 sw/source/core/docnode/node.cxx          |    3 ++-
 sw/source/core/docnode/section.cxx       |    8 ++++----
 sw/source/core/draw/dcontact.cxx         |    3 ++-
 sw/source/core/fields/ddetbl.cxx         |    3 ++-
 sw/source/core/fields/docufld.cxx        |    4 ++--
 sw/source/core/fields/expfld.cxx         |    6 ++++--
 sw/source/core/fields/reffld.cxx         |    4 ++--
 sw/source/core/fields/usrfld.cxx         |    9 ++++++---
 sw/source/core/layout/atrfrm.cxx         |    7 ++++---
 sw/source/core/layout/fly.cxx            |    3 ++-
 sw/source/core/layout/flycnt.cxx         |    4 ++--
 sw/source/core/layout/flyincnt.cxx       |    4 ++--
 sw/source/core/layout/flylay.cxx         |    6 ++++--
 sw/source/core/layout/pagechg.cxx        |    3 ++-
 sw/source/core/layout/pagedesc.cxx       |    3 ++-
 sw/source/core/layout/sectfrm.cxx        |    3 ++-
 sw/source/core/layout/tabfrm.cxx         |   11 ++++++-----
 sw/source/core/layout/wsfrm.cxx          |    8 ++++----
 sw/source/core/table/swtable.cxx         |    8 ++++----
 sw/source/core/text/txtfrm.cxx           |    3 ++-
 sw/source/core/tox/tox.cxx               |    3 ++-
 sw/source/core/txtnode/atrfld.cxx        |    3 ++-
 sw/source/core/txtnode/atrftn.cxx        |    4 ++--
 sw/source/core/txtnode/atrref.cxx        |    4 ++--
 sw/source/core/txtnode/fmtatr2.cxx       |   10 ++++++----
 sw/source/core/txtnode/ndtxt.cxx         |    3 ++-
 sw/source/core/txtnode/txtatr2.cxx       |    8 ++++----
 sw/source/core/undo/rolbck.cxx           |    6 ++++--
 sw/source/core/undo/unattr.cxx           |    6 ++++--
 sw/source/core/undo/undobj1.cxx          |    6 ++++--
 sw/source/core/unocore/unochart.cxx      |    2 +-
 sw/source/core/unocore/unofield.cxx      |    3 ++-
 sw/source/core/unocore/unoidx.cxx        |    3 ++-
 sw/source/filter/basflt/fltshell.cxx     |    3 ++-
 51 files changed, 147 insertions(+), 105 deletions(-)

New commits:
commit 835e89e69765cc8262d1c5b4993caed976386ac4
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Mon Jun 21 14:38:19 2021 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Nov 3 07:54:50 2021 +0100

    create SfxHintId::SwLegacyModify id
    
    to avoid expensive dynamic_casts in writer
    
    Change-Id: Ic73ae7d4af985043f8533913b33939e3445ec7de
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117586
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124592

diff --git a/include/svl/hint.hxx b/include/svl/hint.hxx
index 284ebe7200c4..337930335a0f 100644
--- a/include/svl/hint.hxx
+++ b/include/svl/hint.hxx
@@ -116,6 +116,7 @@ enum class SfxHintId {
     SwSectionFrameMoveAndDelete,
     SwNavigatorUpdateTracking,
     SwNavigatorSelectOutlinesWithSelections,
+    SwLegacyModify,
 
     ThisIsAnSdrHint // used to avoid dynamic_cast
 };
diff --git a/sw/inc/calbck.hxx b/sw/inc/calbck.hxx
index 0863b2da7f2f..2d873107e069 100644
--- a/sw/inc/calbck.hxx
+++ b/sw/inc/calbck.hxx
@@ -68,7 +68,7 @@ namespace sw
     void ClientNotifyAttrChg(SwModify& rModify, const SwAttrSet& aSet, 
SwAttrSet& aOld, SwAttrSet& aNew);
     struct LegacyModifyHint final: SfxHint
     {
-        LegacyModifyHint(const SfxPoolItem* pOld, const SfxPoolItem* pNew) : 
m_pOld(pOld), m_pNew(pNew) {};
+        LegacyModifyHint(const SfxPoolItem* pOld, const SfxPoolItem* pNew) : 
SfxHint(SfxHintId::SwLegacyModify), m_pOld(pOld), m_pNew(pNew) {};
         sal_uInt16 GetWhich() const { return m_pOld ? m_pOld->Which() : m_pNew 
? m_pNew->Which() : 0; };
         virtual ~LegacyModifyHint() override;
         const SfxPoolItem* m_pOld;
diff --git a/sw/inc/swevent.hxx b/sw/inc/swevent.hxx
index e18020320544..b25246cb2e12 100644
--- a/sw/inc/swevent.hxx
+++ b/sw/inc/swevent.hxx
@@ -118,9 +118,9 @@ struct SwCallMouseEvent final
 
     virtual void SwClientNotify(const SwModify& rMod, const SfxHint& rHint) 
override
     {
-        auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-        if(!pLegacy)
+        if (rHint.GetId() != SfxHintId::SwLegacyModify)
             return;
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
         assert(EVENT_OBJECT_IMAGE == eType || EVENT_OBJECT_URLITEM == eType || 
EVENT_OBJECT_IMAGEMAP == eType);
         SwClient::SwClientNotify(rMod, rHint);
         bool bClear = !GetRegisteredIn();
diff --git a/sw/source/core/access/accframebase.cxx 
b/sw/source/core/access/accframebase.cxx
index c078bc2385f7..6f1e73a12338 100644
--- a/sw/source/core/access/accframebase.cxx
+++ b/sw/source/core/access/accframebase.cxx
@@ -213,8 +213,9 @@ void SwAccessibleFrameBase::Notify(const SfxHint& rHint)
     {
         EndListeningAll();
     }
-    else if(auto pLegacyModifyHint = dynamic_cast<const 
sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyModifyHint = static_cast<const 
sw::LegacyModifyHint*>(&rHint);
         const sal_uInt16 nWhich = pLegacyModifyHint->GetWhich();
         const SwFlyFrame* pFlyFrame = static_cast<const 
SwFlyFrame*>(GetFrame());
         if(nWhich == RES_NAME_CHANGED && pFlyFrame)
diff --git a/sw/source/core/access/accnotextframe.cxx 
b/sw/source/core/access/accnotextframe.cxx
index d8f37887b4a4..8f42d72face2 100644
--- a/sw/source/core/access/accnotextframe.cxx
+++ b/sw/source/core/access/accnotextframe.cxx
@@ -87,8 +87,9 @@ void SwAccessibleNoTextFrame::Notify(const SfxHint& rHint)
 {
     if(rHint.GetId() == SfxHintId::Dying)
         EndListeningAll();
-    else if(auto pLegacyModifyHint = dynamic_cast<const 
sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyModifyHint = static_cast<const 
sw::LegacyModifyHint*>(&rHint);
         const sal_uInt16 nWhich = pLegacyModifyHint->GetWhich();
         if (nWhich != RES_TITLE_CHANGED && nWhich != RES_DESCRIPTION_CHANGED)
             return;
diff --git a/sw/source/core/access/acctable.cxx 
b/sw/source/core/access/acctable.cxx
index 7fab0396050c..da48a7aadc12 100644
--- a/sw/source/core/access/acctable.cxx
+++ b/sw/source/core/access/acctable.cxx
@@ -638,8 +638,9 @@ void SwAccessibleTable::Notify(const SfxHint& rHint)
     {
         EndListeningAll();
     }
-    else if(auto pLegacyHint = dynamic_cast<const 
sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         const sal_uInt16 nWhich = pLegacyHint->GetWhich();
         const SwTabFrame* pTabFrame = static_cast<const 
SwTabFrame*>(GetFrame());
         if(nWhich == RES_NAME_CHANGED && pTabFrame)
diff --git a/sw/source/core/access/acctextframe.cxx 
b/sw/source/core/access/acctextframe.cxx
index e4671bd44eb9..0f3b0b60bc84 100644
--- a/sw/source/core/access/acctextframe.cxx
+++ b/sw/source/core/access/acctextframe.cxx
@@ -67,8 +67,9 @@ void SwAccessibleTextFrame::Notify(const SfxHint& rHint)
 {
     if(rHint.GetId() == SfxHintId::Dying)
         EndListeningAll();
-    else if(auto pLegacyModifyHint = dynamic_cast<const 
sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyModifyHint = static_cast<const 
sw::LegacyModifyHint*>(&rHint);
         const sal_uInt16 nWhich = pLegacyModifyHint->GetWhich();
         const SwFlyFrame* pFlyFrame = static_cast<const 
SwFlyFrame*>(GetFrame());
         switch(nWhich)
diff --git a/sw/source/core/attr/calbck.cxx b/sw/source/core/attr/calbck.cxx
index 3f4253cd2566..5f88e36abebc 100644
--- a/sw/source/core/attr/calbck.cxx
+++ b/sw/source/core/attr/calbck.cxx
@@ -37,8 +37,9 @@ namespace sw
         { return m_pToTell == nullptr || m_pToTell->GetInfo( rInfo ); }
     void ListenerEntry::SwClientNotify(const SwModify& rModify, const SfxHint& 
rHint)
     {
-        if (auto pLegacyHint = dynamic_cast<const 
sw::LegacyModifyHint*>(&rHint))
+        if (rHint.GetId() == SfxHintId::SwLegacyModify)
         {
+            auto pLegacyHint = static_cast<const 
sw::LegacyModifyHint*>(&rHint);
             if (pLegacyHint->m_pNew && pLegacyHint->m_pNew->Which() == 
RES_OBJECTDYING)
             {
                 auto pModifyChanged = CheckRegistration(pLegacyHint->m_pOld);
@@ -119,8 +120,10 @@ void SwClient::CheckRegistrationFormat(SwFormat& rOld)
 
 void SwClient::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    if(auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
-        CheckRegistration(pLegacyHint->m_pOld);
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
+        return;
+    auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
+    CheckRegistration(pLegacyHint->m_pOld);
 };
 
 void SwClient::StartListeningToSameModifyAs(const SwClient& other)
@@ -300,16 +303,16 @@ sw::ClientIteratorBase* 
sw::ClientIteratorBase::s_pClientIters = nullptr;
 
 void SwModify::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    if(dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
-    {
-        DBG_TESTSOLARMUTEX();
-        if(IsModifyLocked())
-            return;
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
+        return;
 
-        LockModify();
-        CallSwClientNotify(rHint);
-        UnlockModify();
-    }
+    DBG_TESTSOLARMUTEX();
+    if(IsModifyLocked())
+        return;
+
+    LockModify();
+    CallSwClientNotify(rHint);
+    UnlockModify();
 }
 
 void SwModify::CallSwClientNotify( const SfxHint& rHint ) const
diff --git a/sw/source/core/attr/format.cxx b/sw/source/core/attr/format.cxx
index d5c3a3833f0d..7efb53cd7e45 100644
--- a/sw/source/core/attr/format.cxx
+++ b/sw/source/core/attr/format.cxx
@@ -226,9 +226,9 @@ SwFormat::~SwFormat()
 
 void SwFormat::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
 
     std::unique_ptr<SwAttrSetChg> pOldClientChg, pNewClientChg;
     auto pDependsHint = 
std::make_unique<sw::LegacyModifyHint>(pLegacy->m_pOld, pLegacy->m_pNew);
diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx
index 3a22f54180c5..2178d0009273 100644
--- a/sw/source/core/crsr/bookmrk.cxx
+++ b/sw/source/core/crsr/bookmrk.cxx
@@ -342,8 +342,10 @@ namespace sw::mark
     void MarkBase::SwClientNotify(const SwModify&, const SfxHint& rHint)
     {
         CallSwClientNotify(rHint);
-        auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-        if(pLegacy && RES_REMOVE_UNO_OBJECT == pLegacy->GetWhich())
+        if (rHint.GetId() != SfxHintId::SwLegacyModify)
+            return;
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
+        if(RES_REMOVE_UNO_OBJECT == pLegacy->GetWhich())
         {   // invalidate cached uno object
             SetXBookmark(uno::Reference<text::XTextContent>(nullptr));
         }
diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index fbd4064e3d61..5f6db943d5dd 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -2484,9 +2484,9 @@ void SwCursorShell::SwClientNotify(const SwModify&, const 
SfxHint& rHint)
         m_aGrfArrivedLnk.Call(*this);
         return;
     }
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     auto nWhich = pLegacy->GetWhich();
     if(!nWhich)
         nWhich = sal::static_int_cast<sal_uInt16>(RES_MSG_BEGIN);
diff --git a/sw/source/core/doc/acmplwrd.cxx b/sw/source/core/doc/acmplwrd.cxx
index 08f796270a3e..65eb9193b679 100644
--- a/sw/source/core/doc/acmplwrd.cxx
+++ b/sw/source/core/doc/acmplwrd.cxx
@@ -132,9 +132,9 @@ SwAutoCompleteClient& SwAutoCompleteClient::operator=(const 
SwAutoCompleteClient
 
 void SwAutoCompleteClient::SwClientNotify(const SwModify&, const SfxHint& 
rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     switch(pLegacy->GetWhich())
     {
         case RES_REMOVE_UNO_OBJECT:
diff --git a/sw/source/core/doc/docftn.cxx b/sw/source/core/doc/docftn.cxx
index 7f2b30ddc615..c78fd07e2d9a 100644
--- a/sw/source/core/doc/docftn.cxx
+++ b/sw/source/core/doc/docftn.cxx
@@ -227,8 +227,9 @@ void SwEndNoteInfo::UpdateFormatOrAttr()
 
 void SwEndNoteInfo::SwClientNotify( const SwModify& rModify, const SfxHint& 
rHint)
 {
-    if (auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         switch(pLegacyHint->GetWhich())
         {
             case RES_ATTRSET_CHG:
diff --git a/sw/source/core/doc/fmtcol.cxx b/sw/source/core/doc/fmtcol.cxx
index a0dcda5cff88..bf7a8f02f78d 100644
--- a/sw/source/core/doc/fmtcol.cxx
+++ b/sw/source/core/doc/fmtcol.cxx
@@ -117,9 +117,9 @@ SwTextFormatColl::~SwTextFormatColl()
 }
 void SwTextFormatColl::SwClientNotify(const SwModify& rModify, const SfxHint& 
rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
-       return;
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
+        return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     if(GetDoc()->IsInDtor())
     {
         SwFormatColl::SwClientNotify(rModify, rHint);
diff --git a/sw/source/core/doc/lineinfo.cxx b/sw/source/core/doc/lineinfo.cxx
index 2a9963f39cda..e77e14a174d8 100644
--- a/sw/source/core/doc/lineinfo.cxx
+++ b/sw/source/core/doc/lineinfo.cxx
@@ -114,9 +114,9 @@ void SwLineNumberInfo::SetCharFormat( SwCharFormat 
*pChFormat )
 
 void SwLineNumberInfo::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     CheckRegistration( pLegacy->m_pOld );
     SwDoc *pDoc = static_cast<SwCharFormat*>(GetRegisteredIn())->GetDoc();
     SwRootFrame* pRoot = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
diff --git a/sw/source/core/doc/notxtfrm.cxx b/sw/source/core/doc/notxtfrm.cxx
index e4f2e071afba..309bac7725d1 100644
--- a/sw/source/core/doc/notxtfrm.cxx
+++ b/sw/source/core/doc/notxtfrm.cxx
@@ -750,9 +750,9 @@ void SwNoTextFrame::SwClientNotify(const SwModify& rModify, 
const SfxHint& rHint
         OnGraphicArrived();
         return;
     }
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     sal_uInt16 nWhich = pLegacy->GetWhich();
 
     // #i73788#
diff --git a/sw/source/core/doc/number.cxx b/sw/source/core/doc/number.cxx
index 5bc80fc99f3b..aae3d54e08d6 100644
--- a/sw/source/core/doc/number.cxx
+++ b/sw/source/core/doc/number.cxx
@@ -280,9 +280,9 @@ void SwNumFormat::SetCharFormat( SwCharFormat* pChFormat)
 
 void SwNumFormat::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     // Look for the NumRules object in the Doc where this NumFormat is set.
     // The format does not need to exist!
     const SwCharFormat* pFormat = nullptr;
diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx
index 4f7b18ba3a68..b8f946bc2871 100644
--- a/sw/source/core/docnode/node.cxx
+++ b/sw/source/core/docnode/node.cxx
@@ -1107,8 +1107,9 @@ void SwContentNode::UpdateAttr(const SwUpdateAttr& 
rUpdate)
 
 void SwContentNode::SwClientNotify( const SwModify&, const SfxHint& rHint)
 {
-    if (auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         const sal_uInt16 nWhich = pLegacyHint->GetWhich();
         InvalidateInSwCache(nWhich);
 
diff --git a/sw/source/core/docnode/section.cxx 
b/sw/source/core/docnode/section.cxx
index 9491b56b53c3..afa8b905e99e 100644
--- a/sw/source/core/docnode/section.cxx
+++ b/sw/source/core/docnode/section.cxx
@@ -405,9 +405,9 @@ void SwSection::SetEditInReadonly(bool const bFlag)
 
 void SwSection::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     auto pOld = pLegacy->m_pOld;
     auto pNew = pLegacy->m_pNew;
     bool bUpdateFootnote = false;
@@ -728,9 +728,9 @@ void SwSectionFormat::MakeFrames()
 
 void SwSectionFormat::SwClientNotify(const SwModify& rMod, const SfxHint& 
rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     sal_uInt16 nWhich = pLegacy->GetWhich();
     auto pOld = pLegacy->m_pOld;
     auto pNew = pLegacy->m_pNew;
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index d2554e0ab5ae..ad377073a58e 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -1397,8 +1397,9 @@ void SwDrawContact::SwClientNotify(const SwModify& rMod, 
const SfxHint& rHint)
 {
     SwClient::SwClientNotify(rMod, rHint); // needed as 
SwContact::SwClientNotify doesn't explicitly call SwClient::SwClientNotify
     SwContact::SwClientNotify(rMod, rHint);
-    if (auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         SAL_WARN_IF(mbDisconnectInProgress, "sw.core", 
"<SwDrawContact::Modify(..)> called during disconnection.");
 
         const SfxPoolItem* pNew = pLegacyHint->m_pNew;
diff --git a/sw/source/core/fields/ddetbl.cxx b/sw/source/core/fields/ddetbl.cxx
index a131515eaa0e..d4496e40623c 100644
--- a/sw/source/core/fields/ddetbl.cxx
+++ b/sw/source/core/fields/ddetbl.cxx
@@ -85,8 +85,9 @@ SwDDETable::~SwDDETable()
 
 void SwDDETable::SwClientNotify(const SwModify& rModify, const SfxHint& rHint)
 {
-    if(auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
         switch(pLegacy->GetWhich())
         {
             case RES_UPDATEDDETBL:
diff --git a/sw/source/core/fields/docufld.cxx 
b/sw/source/core/fields/docufld.cxx
index 388140e0a2d8..85f4bb6515f4 100644
--- a/sw/source/core/fields/docufld.cxx
+++ b/sw/source/core/fields/docufld.cxx
@@ -2167,9 +2167,9 @@ std::unique_ptr<SwFieldType> 
SwRefPageGetFieldType::Copy() const
 
 void SwRefPageGetFieldType::SwClientNotify(const SwModify&, const SfxHint& 
rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     auto const ModifyImpl = [this](SwRootFrame const*const pLayout)
     {
         // first collect all SetPageRefFields
diff --git a/sw/source/core/fields/expfld.cxx b/sw/source/core/fields/expfld.cxx
index 8b6917094f89..2a078ce5055e 100644
--- a/sw/source/core/fields/expfld.cxx
+++ b/sw/source/core/fields/expfld.cxx
@@ -273,9 +273,11 @@ std::unique_ptr<SwFieldType> SwGetExpFieldType::Copy() 
const
 
 void SwGetExpFieldType::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
+        return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     // do not expand anything else
-    if(!pLegacy || (pLegacy->GetWhich() != RES_DOCPOS_UPDATE))
+    if(pLegacy->GetWhich() != RES_DOCPOS_UPDATE)
         return;
     CallSwClientNotify(rHint);
 }
diff --git a/sw/source/core/fields/reffld.cxx b/sw/source/core/fields/reffld.cxx
index 3b5854308810..2340c1313d0f 100644
--- a/sw/source/core/fields/reffld.cxx
+++ b/sw/source/core/fields/reffld.cxx
@@ -1095,9 +1095,9 @@ void SwGetRefFieldType::UpdateGetReferences()
 
 void SwGetRefFieldType::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     if(!pLegacy->m_pNew && !pLegacy->m_pOld)
         // update to all GetReference fields
         // hopefully, this codepath is soon dead code, and
diff --git a/sw/source/core/fields/usrfld.cxx b/sw/source/core/fields/usrfld.cxx
index 9feb828a156b..fb1a7f8dc2f2 100644
--- a/sw/source/core/fields/usrfld.cxx
+++ b/sw/source/core/fields/usrfld.cxx
@@ -215,9 +215,12 @@ OUString SwUserFieldType::GetName() const
 
 void SwUserFieldType::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if (pLegacy && !pLegacy->m_pOld && !pLegacy->m_pNew)
-        m_bValidValue = false;
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
+    {
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
+        if (!pLegacy->m_pOld && !pLegacy->m_pNew)
+            m_bValidValue = false;
+    }
 
     CallSwClientNotify(rHint);
     // update input fields that might be connected to the user field
diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx
index 5e7d6100bc0e..605da4a1e1bf 100644
--- a/sw/source/core/layout/atrfrm.cxx
+++ b/sw/source/core/layout/atrfrm.cxx
@@ -699,8 +699,9 @@ void SwFormatPageDesc::SwClientNotify(const SwModify&, 
const SfxHint& rHint)
             // there could be an Undo-copy
             RegisterToPageDesc(*pDesc);
     }
-    else if(auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
         if(RES_OBJECTDYING == pLegacy->GetWhich())
         {
             m_pDefinedIn = nullptr;
@@ -2625,9 +2626,9 @@ bool 
SwFrameFormat::supportsFullDrawingLayerFillAttributeSet() const
 
 void SwFrameFormat::SwClientNotify(const SwModify& rMod, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     const sal_uInt16 nNewWhich = pLegacy->m_pNew ? pLegacy->m_pNew->Which() : 
0;
     const SwAttrSetChg* pNewAttrSetChg = nullptr;
     const SwFormatHeader* pH = nullptr;
diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
index 8181bd623d39..7c512b991699 100644
--- a/sw/source/core/layout/fly.cxx
+++ b/sw/source/core/layout/fly.cxx
@@ -660,8 +660,9 @@ bool SwFlyFrame::FrameSizeChg( const SwFormatFrameSize 
&rFrameSize )
 
 void SwFlyFrame::SwClientNotify(const SwModify& rMod, const SfxHint& rHint)
 {
-    if(auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
         SwFlyFrameInvFlags eInvFlags = SwFlyFrameInvFlags::NONE;
         if(pLegacy->m_pNew && pLegacy->m_pOld && RES_ATTRSET_CHG == 
pLegacy->m_pNew->Which())
         {
diff --git a/sw/source/core/layout/flycnt.cxx b/sw/source/core/layout/flycnt.cxx
index 22f4ac74567f..8cfb9524365c 100644
--- a/sw/source/core/layout/flycnt.cxx
+++ b/sw/source/core/layout/flycnt.cxx
@@ -85,9 +85,9 @@ SwFlyAtContentFrame::SwFlyAtContentFrame( SwFlyFrameFormat 
*pFormat, SwFrame* pS
 
 void SwFlyAtContentFrame::SwClientNotify(const SwModify& rMod, const SfxHint& 
rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     const SwFormatAnchor* pAnch = pLegacy->m_pNew ? 
GetAnchorFromPoolItem(*pLegacy->m_pNew) : nullptr;
     if(!pAnch)
     {
diff --git a/sw/source/core/layout/flyincnt.cxx 
b/sw/source/core/layout/flyincnt.cxx
index 461d2f779e1b..06ef88e74169 100644
--- a/sw/source/core/layout/flyincnt.cxx
+++ b/sw/source/core/layout/flyincnt.cxx
@@ -93,9 +93,9 @@ void SwFlyInContentFrame::SetRefPoint( const Point& rPoint,
 
 void SwFlyInContentFrame::SwClientNotify(const SwModify& rMod, const SfxHint& 
rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     std::pair<std::unique_ptr<SwAttrSetChg>, std::unique_ptr<SwAttrSetChg>> 
aTweakedChgs;
     std::pair<const SfxPoolItem*, const SfxPoolItem*> aSuperArgs(nullptr, 
nullptr);
     switch(pLegacy->GetWhich())
diff --git a/sw/source/core/layout/flylay.cxx b/sw/source/core/layout/flylay.cxx
index ea50b06ab364..aee8a93f423b 100644
--- a/sw/source/core/layout/flylay.cxx
+++ b/sw/source/core/layout/flylay.cxx
@@ -728,8 +728,10 @@ SwFlyLayFrame::SwFlyLayFrame( SwFlyFrameFormat *pFormat, 
SwFrame* pSib, SwFrame
 
 void SwFlyLayFrame::SwClientNotify(const SwModify& rMod, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy || !pLegacy->m_pNew)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
+        return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
+    if(!pLegacy->m_pNew)
         return;
     const auto pAnch = GetAnchorFromPoolItem(*pLegacy->m_pNew);
 
diff --git a/sw/source/core/layout/pagechg.cxx 
b/sw/source/core/layout/pagechg.cxx
index d699d59ecb80..af95881bcc86 100644
--- a/sw/source/core/layout/pagechg.cxx
+++ b/sw/source/core/layout/pagechg.cxx
@@ -509,8 +509,9 @@ void SwPageFrame::SwClientNotify(const SwModify& rModify, 
const SfxHint& rHint)
         // here, the page might be destroyed:
         static_cast<SwRootFrame*>(GetUpper())->RemoveFootnotes(nullptr, false, 
true);
     }
-    else if(auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
         if(auto pSh = getRootFrame()->GetCurrShell())
             pSh->SetFirstVisPageInvalid();
 
diff --git a/sw/source/core/layout/pagedesc.cxx 
b/sw/source/core/layout/pagedesc.cxx
index c5c9c31ab7b9..036f20da411c 100644
--- a/sw/source/core/layout/pagedesc.cxx
+++ b/sw/source/core/layout/pagedesc.cxx
@@ -283,8 +283,9 @@ void SwPageDesc::RegisterChange()
 /// special handling if the style of the grid alignment changes
 void SwPageDesc::SwClientNotify(const SwModify& rModify, const SfxHint& rHint)
 {
-    if(auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         const sal_uInt16 nWhich = pLegacyHint->m_pOld
                 ? pLegacyHint->m_pOld->Which()
                 : pLegacyHint->m_pNew
diff --git a/sw/source/core/layout/sectfrm.cxx 
b/sw/source/core/layout/sectfrm.cxx
index 079e7de2b264..bc529bd28708 100644
--- a/sw/source/core/layout/sectfrm.cxx
+++ b/sw/source/core/layout/sectfrm.cxx
@@ -2568,8 +2568,9 @@ void SwSectionFrame::CalcEndAtEndFlag()
 
 void SwSectionFrame::SwClientNotify(const SwModify& rMod, const SfxHint& rHint)
 {
-    if(const auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
         SwSectionFrameInvFlags eInvFlags = SwSectionFrameInvFlags::NONE;
         if(pLegacy->m_pNew && RES_ATTRSET_CHG == pLegacy->m_pNew->Which())
         {
diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index 1626e4eac315..979ed834cd56 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -3287,9 +3287,9 @@ SwTwips SwTabFrame::GrowFrame( SwTwips nDist, bool bTst, 
bool bInfo )
 
 void SwTabFrame::SwClientNotify(const SwModify& rMod, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     SwTabFrameInvFlags eInvFlags = SwTabFrameInvFlags::NONE;
     bool bAttrSetChg = pLegacy->m_pNew && RES_ATTRSET_CHG == 
pLegacy->m_pNew->Which();
 
@@ -3921,9 +3921,9 @@ void SwRowFrame::SwClientNotify(const SwModify& rModify, 
const SfxHint& rHint)
         ReinitializeFrameSizeAttrFlags();
         return;
     }
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     if(!pLegacy->m_pNew)
     {
         // possibly not needed?
@@ -5435,8 +5435,9 @@ void SwCellFrame::SwClientNotify(const SwModify& rMod, 
const SfxHint& rHint)
         CheckDirChange();
         return;
     }
-    else if(auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
         const SfxPoolItem* pVertOrientItem = nullptr;
         const SfxPoolItem* pProtectItem = nullptr;
         const SfxPoolItem* pFrameDirItem = nullptr;
diff --git a/sw/source/core/layout/wsfrm.cxx b/sw/source/core/layout/wsfrm.cxx
index e7118b2516e5..b06b6a4fdd64 100644
--- a/sw/source/core/layout/wsfrm.cxx
+++ b/sw/source/core/layout/wsfrm.cxx
@@ -476,9 +476,9 @@ void SwTextFrame::CheckDirection( bool bVert )
 
 void SwFrame::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     SwFrameInvFlags eInvFlags = SwFrameInvFlags::NONE;
 
     if(pLegacy->m_pOld && pLegacy->m_pNew && RES_ATTRSET_CHG == 
pLegacy->m_pNew->Which())
@@ -2344,9 +2344,9 @@ SwTwips SwContentFrame::ShrinkFrame( SwTwips nDist, bool 
bTst, bool bInfo )
 
 void SwContentFrame::SwClientNotify(const SwModify& rMod, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     SwContentFrameInvFlags eInvFlags = SwContentFrameInvFlags::NONE;
     if(pLegacy->m_pNew && RES_ATTRSET_CHG == pLegacy->m_pNew->Which() && 
pLegacy->m_pOld)
     {
diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx
index 84f5e5559ab4..4ddfb060fc8d 100644
--- a/sw/source/core/table/swtable.cxx
+++ b/sw/source/core/table/swtable.cxx
@@ -315,9 +315,9 @@ static void lcl_ModifyBoxes( SwTableBoxes &rBoxes, const 
tools::Long nOld,
 
 void SwTable::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     // catch SSize changes, to adjust the lines/boxes
     const sal_uInt16 nWhich = pLegacy->GetWhich();
     const SwFormatFrameSize* pNewSize = nullptr, *pOldSize = nullptr;
@@ -2182,9 +2182,9 @@ static void ChgNumToText( SwTableBox& rBox, sal_uLong 
nFormat )
 // for detection of modifications (mainly TableBoxAttribute)
 void SwTableBoxFormat::SwClientNotify(const SwModify& rMod, const SfxHint& 
rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     if(IsModifyLocked() || !GetDoc() || GetDoc()->IsInDtor())
     {
         SwFrameFormat::SwClientNotify(rMod, rHint);
diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index 57ef2431daac..19abe46edc50 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -1979,8 +1979,9 @@ void SwTextFrame::SwClientNotify(SwModify const& rModify, 
SfxHint const& rHint)
     sw::RedlineUnDelText const* pRedlineUnDelText(nullptr);
 
     sal_uInt16 nWhich = 0;
-    if (auto const pHint = dynamic_cast<sw::LegacyModifyHint const*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         pOld = pHint->m_pOld;
         pNew = pHint->m_pNew;
         nWhich = pHint->GetWhich();
diff --git a/sw/source/core/tox/tox.cxx b/sw/source/core/tox/tox.cxx
index 30a5c6f9da35..986f60dfd5cd 100644
--- a/sw/source/core/tox/tox.cxx
+++ b/sw/source/core/tox/tox.cxx
@@ -154,8 +154,9 @@ SwTOXMark* SwTOXMark::Clone( SfxItemPool* ) const
 
 void SwTOXMark::Notify(const SfxHint& rHint)
 {
-    if (auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         CallSwClientNotify(rHint);
         if (pLegacyHint->m_pOld && (RES_REMOVE_UNO_OBJECT == 
pLegacyHint->m_pOld->Which()))
             
SetXTOXMark(css::uno::Reference<css::text::XDocumentIndexMark>(nullptr));
diff --git a/sw/source/core/txtnode/atrfld.cxx 
b/sw/source/core/txtnode/atrfld.cxx
index 2124e55c7d65..05d10a2aae40 100644
--- a/sw/source/core/txtnode/atrfld.cxx
+++ b/sw/source/core/txtnode/atrfld.cxx
@@ -241,8 +241,9 @@ void SwFormatField::SwClientNotify( const SwModify& 
rModify, const SfxHint& rHin
         pPaM->Move( fnMoveForward );
         rDoc.getIDocumentContentOperations().DeleteRange( *pPaM );
         rDoc.getIDocumentContentOperations().InsertString( *pPaM, aEntry );
-    } else if (const auto pLegacyHint = dynamic_cast<const 
sw::LegacyModifyHint*>( &rHint ))
+    } else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         if( !mpTextField )
             return;
         UpdateTextNode(pLegacyHint->m_pOld, pLegacyHint->m_pNew);
diff --git a/sw/source/core/txtnode/atrftn.cxx 
b/sw/source/core/txtnode/atrftn.cxx
index 2376ca3169c2..4a2f455d9b91 100644
--- a/sw/source/core/txtnode/atrftn.cxx
+++ b/sw/source/core/txtnode/atrftn.cxx
@@ -155,9 +155,9 @@ SwFormatFootnote* SwFormatFootnote::Clone( SfxItemPool* ) 
const
 
 void SwFormatFootnote::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     CallSwClientNotify(rHint);
     if(RES_REMOVE_UNO_OBJECT == pLegacy->GetWhich())
         SetXFootnote(css::uno::Reference<css::text::XFootnote>(nullptr));
diff --git a/sw/source/core/txtnode/atrref.cxx 
b/sw/source/core/txtnode/atrref.cxx
index 8b11c4e525c7..e281803050e3 100644
--- a/sw/source/core/txtnode/atrref.cxx
+++ b/sw/source/core/txtnode/atrref.cxx
@@ -56,9 +56,9 @@ SwFormatRefMark* SwFormatRefMark::Clone( SfxItemPool* ) const
 
 void SwFormatRefMark::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     CallSwClientNotify(rHint);
     if(RES_REMOVE_UNO_OBJECT == pLegacy->GetWhich())
         SetXRefMark(css::uno::Reference<css::text::XTextContent>(nullptr));
diff --git a/sw/source/core/txtnode/fmtatr2.cxx 
b/sw/source/core/txtnode/fmtatr2.cxx
index afc82565c515..3ba9385f8ac4 100644
--- a/sw/source/core/txtnode/fmtatr2.cxx
+++ b/sw/source/core/txtnode/fmtatr2.cxx
@@ -86,8 +86,10 @@ SwFormatCharFormat* SwFormatCharFormat::Clone( SfxItemPool* 
) const
 // forward to the TextAttribute
 void SwFormatCharFormat::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(m_pTextAttribute && pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
+        return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
+    if(m_pTextAttribute)
         m_pTextAttribute->TriggerNodeUpdate(*pLegacy);
 }
 
@@ -671,9 +673,9 @@ void Meta::NotifyChangeTextNode(SwTextNode *const pTextNode)
 
 void Meta::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     CallSwClientNotify(rHint);
     GetNotifier().Broadcast(SfxHint(SfxHintId::DataChanged));
     if(RES_REMOVE_UNO_OBJECT == pLegacy->GetWhich())
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index b4b70f52c7f9..a0cc7337baa1 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -5296,8 +5296,9 @@ void SwTextNode::TriggerNodeUpdate(const 
sw::LegacyModifyHint& rHint)
 
 void SwTextNode::SwClientNotify( const SwModify& rModify, const SfxHint& rHint 
)
 {
-    if (auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         TriggerNodeUpdate(*pLegacyHint);
     }
     else if (dynamic_cast<const SwAttrHint*>(&rHint))
diff --git a/sw/source/core/txtnode/txtatr2.cxx 
b/sw/source/core/txtnode/txtatr2.cxx
index 71cbb16e2be7..96c905bb4d76 100644
--- a/sw/source/core/txtnode/txtatr2.cxx
+++ b/sw/source/core/txtnode/txtatr2.cxx
@@ -160,9 +160,9 @@ SwCharFormat* SwTextINetFormat::GetCharFormat()
 
 void SwTextINetFormat::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     const auto nWhich = pLegacy->GetWhich();
     OSL_ENSURE(isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
             || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
@@ -201,9 +201,9 @@ SwTextRuby::~SwTextRuby()
 
 void SwTextRuby::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
         return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
     const auto nWhich = pLegacy->GetWhich();
     SAL_WARN_IF( !isCHRATR(nWhich)
             && (RES_OBJECTDYING == nWhich)
diff --git a/sw/source/core/undo/rolbck.cxx b/sw/source/core/undo/rolbck.cxx
index a1310936c851..402f1486654b 100644
--- a/sw/source/core/undo/rolbck.cxx
+++ b/sw/source/core/undo/rolbck.cxx
@@ -1387,8 +1387,10 @@ SwRegHistory::SwRegHistory( const SwNode& rNd, 
SwHistory* pHst )
 
 void SwRegHistory::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if ( !(m_pHistory && pLegacyHint && pLegacyHint->m_pNew && 
pLegacyHint->m_pOld != pLegacyHint->m_pNew) )
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
+        return;
+    auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
+    if ( !(m_pHistory && pLegacyHint->m_pNew && pLegacyHint->m_pOld != 
pLegacyHint->m_pNew) )
         return;
 
     if ( pLegacyHint->m_pNew->Which() < POOLATTR_END )
diff --git a/sw/source/core/undo/unattr.cxx b/sw/source/core/undo/unattr.cxx
index 67b6f06a50a1..160a983b1c00 100644
--- a/sw/source/core/undo/unattr.cxx
+++ b/sw/source/core/undo/unattr.cxx
@@ -64,8 +64,10 @@ SwUndoFormatAttrHelper::SwUndoFormatAttrHelper(SwFormat& 
rFormat, bool bSvDrwPt)
 
 void SwUndoFormatAttrHelper::SwClientNotify(const SwModify&, const SfxHint& 
rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy || !pLegacy->m_pOld)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
+        return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
+    if(!pLegacy->m_pOld)
         return;
     assert(pLegacy->m_pOld->Which() != RES_OBJECTDYING);
     if(!pLegacy->m_pNew)
diff --git a/sw/source/core/undo/undobj1.cxx b/sw/source/core/undo/undobj1.cxx
index aa2d2d624fd2..bbbfaaa5ef3e 100644
--- a/sw/source/core/undo/undobj1.cxx
+++ b/sw/source/core/undo/undobj1.cxx
@@ -700,8 +700,10 @@ void SwUndoSetFlyFormat::PutAttr( sal_uInt16 nWhich, const 
SfxPoolItem* pItem )
 
 void SwUndoSetFlyFormat::SwClientNotify(const SwModify&, const SfxHint& rHint)
 {
-    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
-    if(!pLegacy || !pLegacy->m_pOld)
+    if (rHint.GetId() != SfxHintId::SwLegacyModify)
+        return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
+    if(!pLegacy->m_pOld)
         return;
     const sal_uInt16 nWhich = pLegacy->m_pOld->Which();
     if(nWhich < POOLATTR_END)
diff --git a/sw/source/core/unocore/unochart.cxx 
b/sw/source/core/unocore/unochart.cxx
index 04e28ab30c4f..fc7b5414dc20 100644
--- a/sw/source/core/unocore/unochart.cxx
+++ b/sw/source/core/unocore/unochart.cxx
@@ -2171,7 +2171,7 @@ void SwChartDataSequence::Notify( const SfxHint& rHint)
         m_pTableCursor.reset(nullptr);
         dispose();
     }
-    else if (dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
         setModified( true );
     }
diff --git a/sw/source/core/unocore/unofield.cxx 
b/sw/source/core/unocore/unofield.cxx
index a4f4cb597415..796ed4bf4576 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -2629,8 +2629,9 @@ void SwXTextField::Impl::Notify(const SfxHint& rHint)
 
     if(rHint.GetId() == SfxHintId::Dying)
         Invalidate();
-    else if (auto pLegacyHint = dynamic_cast<const 
sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         switch(pLegacyHint->m_pOld ? pLegacyHint->m_pOld->Which() : 0)
         {
             case RES_REMOVE_UNO_OBJECT:
diff --git a/sw/source/core/unocore/unoidx.cxx 
b/sw/source/core/unocore/unoidx.cxx
index 1b75e9fb0e24..b74faf87bdc4 100644
--- a/sw/source/core/unocore/unoidx.cxx
+++ b/sw/source/core/unocore/unoidx.cxx
@@ -359,8 +359,9 @@ public:
 
 void SwXDocumentIndex::Impl::Notify(const SfxHint& rHint)
 {
-    if(auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+    if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
         if(pLegacy->m_pOld && pLegacy->m_pOld->Which() == 
RES_REMOVE_UNO_OBJECT)
             m_pFormat = nullptr;
     }
diff --git a/sw/source/filter/basflt/fltshell.cxx 
b/sw/source/filter/basflt/fltshell.cxx
index e81bcec11df4..df41a5f03750 100644
--- a/sw/source/filter/basflt/fltshell.cxx
+++ b/sw/source/filter/basflt/fltshell.cxx
@@ -967,8 +967,9 @@ void SwFltAnchorListener::Notify(const SfxHint& rHint)
             return;
         m_pFltAnchor->SetFrameFormat(nullptr);
     }
-    else if (auto pLegacyHint = dynamic_cast<const 
sw::LegacyModifyHint*>(&rHint))
+    else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
+        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
         if(pLegacyHint->m_pNew->Which() != RES_FMT_CHG)
             return;
         auto pFormatChg = dynamic_cast<const 
SwFormatChg*>(pLegacyHint->m_pNew);

Reply via email to