sw/inc/IDocumentFieldsAccess.hxx             |    2 +-
 sw/inc/SwUndoField.hxx                       |    8 ++++----
 sw/inc/fmtfld.hxx                            |    2 +-
 sw/inc/hintids.hxx                           |    1 -
 sw/source/core/doc/DocumentFieldsManager.cxx |   13 +++++--------
 sw/source/core/edit/edfld.cxx                |    6 ------
 sw/source/core/inc/DocumentFieldsManager.hxx |    2 +-
 sw/source/core/txtnode/atrfld.cxx            |   20 ++++++++------------
 sw/source/core/undo/SwUndoField.cxx          |    7 +++----
 sw/source/uibase/docvw/AnnotationWin.cxx     |    4 ++--
 10 files changed, 25 insertions(+), 40 deletions(-)

New commits:
commit 309469a3863c1ce7a2d463f3a62f5101c39ac89c
Author:     Bjoern Michaelsen <bjoern.michael...@libreoffice.org>
AuthorDate: Mon Apr 3 21:12:14 2023 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Tue Apr 4 11:27:40 2023 +0200

    RES_REFMARKFLD_UPDATE no more (lots of zombie code)
    
    - RES_REFMARKFLD_UPDATE is only instantiated in SwEditShell::UpdateOneField
    - ... which passes it to DocumentFieldsManager::UpdateField, which
      * puts it in an SwUndoFieldFromDoc into the undo stack
      * and passes it to UpdateTextNode
    - SwUndoFieldFromDoc::UpdateField only uses it to pass it back again to
      DocumentFieldsManager::UpdateField
    - in UpdateTextNode RES_REFMARKFLD_UPDATE does not trigger any specific
      code
    
    thus:
    - replace UpdateTextNode with ForceUpdateTextNode
    - remove the message item from the SwUndoFieldFromDoc ctor
    - remove the message item as a parameter to
      DocumentFieldsManager::UpdateField as it was only ever used for
      RES_REFMARKFLD_UPDATE
    - remove the instantiation in SwEditShell::UpdateOneField
    - and finally: remove RES_REFMARKFLD_UPDATE itself
    
    Change-Id: I3f7e27a555a24630d6d5a2c1a40db9096195b826
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150004
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/sw/inc/IDocumentFieldsAccess.hxx b/sw/inc/IDocumentFieldsAccess.hxx
index d0bdfe34589b..4664ae3bc846 100644
--- a/sw/inc/IDocumentFieldsAccess.hxx
+++ b/sw/inc/IDocumentFieldsAccess.hxx
@@ -92,7 +92,7 @@ namespace com::sun::star::uno { class Any; }
         @retval true             update was successful
         @retval false            else
     */
-    virtual bool UpdateField(SwTextField * rDstFormatField, SwField & 
rSrcField, const SwMsgPoolItem * pMsgHint, bool bUpdateTableFields) = 0;
+    virtual bool UpdateField(SwTextField * rDstFormatField, SwField & 
rSrcField, bool bUpdateTableFields) = 0;
 
     virtual void UpdateRefFields() = 0;
 
diff --git a/sw/inc/SwUndoField.hxx b/sw/inc/SwUndoField.hxx
index 95cb676c5de2..dcdc57b0b9bd 100644
--- a/sw/inc/SwUndoField.hxx
+++ b/sw/inc/SwUndoField.hxx
@@ -44,15 +44,15 @@ public:
 class SwUndoFieldFromDoc final : public SwUndoField
 {
     std::unique_ptr<SwField> m_pOldField, m_pNewField;
-    const SwMsgPoolItem * m_pHint;
     bool m_bUpdate;
 
     void DoImpl();
 
 public:
-    SwUndoFieldFromDoc(const SwPosition & rPos, const SwField & aOldField,
-                       const SwField & aNewField,
-                       const SwMsgPoolItem * pHint, bool bUpdate);
+    SwUndoFieldFromDoc(const SwPosition& rPos,
+        const SwField& aOldField,
+        const SwField& aNewField,
+        bool bUpdate);
 
     virtual ~SwUndoFieldFromDoc() override;
 
diff --git a/sw/inc/fmtfld.hxx b/sw/inc/fmtfld.hxx
index 4bbd6d4cdf05..6f5811539b17 100644
--- a/sw/inc/fmtfld.hxx
+++ b/sw/inc/fmtfld.hxx
@@ -168,7 +168,7 @@ public:
     void dumpAsXml(xmlTextWriterPtr pWriter) const override;
 
     void ForceUpdateTextNode();
-    void UpdateTextNode(const SfxPoolItem* pOld, const SfxPoolItem* pNew);
+    void UpdateTextNode(const SfxHint& rHint);
     void UpdateDocPos(const SwTwips nDocPos);
 };
 
diff --git a/sw/inc/hintids.hxx b/sw/inc/hintids.hxx
index 17c1fe545136..0673e724552c 100644
--- a/sw/inc/hintids.hxx
+++ b/sw/inc/hintids.hxx
@@ -432,7 +432,6 @@ constexpr TypedWhichId<SwPtrMsgPoolItem> 
RES_OBJECTDYING(RES_FORMAT_MSG_BEGIN);
 constexpr TypedWhichId<SwFormatChg> RES_FMT_CHG(168);
 constexpr TypedWhichId<SwAttrSetChg> RES_ATTRSET_CHG(169);
 constexpr TypedWhichId<SwUpdateAttr> RES_UPDATE_ATTR(170);
-constexpr TypedWhichId<SwPtrMsgPoolItem> RES_REFMARKFLD_UPDATE(171);
 constexpr TypedWhichId<SwAutoFormatGetDocNode> RES_AUTOFMT_DOCNODE(176);
 constexpr TypedWhichId<SwMsgPoolItem> RES_HIDDENPARA_PRINT(178);
 constexpr TypedWhichId<SwVirtPageNumInfo> RES_VIRTPAGENUM_INFO(180);
diff --git a/sw/source/core/doc/DocumentFieldsManager.cxx 
b/sw/source/core/doc/DocumentFieldsManager.cxx
index cff26818dd34..c8703e7f06ef 100644
--- a/sw/source/core/doc/DocumentFieldsManager.cxx
+++ b/sw/source/core/doc/DocumentFieldsManager.cxx
@@ -491,10 +491,9 @@ void DocumentFieldsManager::PutValueToField(const 
SwPosition & rPos,
     pField->PutValue(rVal, nWhich);
 }
 
-bool DocumentFieldsManager::UpdateField(SwTextField * pDstTextField, SwField & 
rSrcField,
-                      const SwMsgPoolItem * pMsgHint,
-                      bool bUpdateFields)
+bool DocumentFieldsManager::UpdateField(SwTextField* pDstTextField, SwField& 
rSrcField, bool bUpdateFields)
 {
+    //static const sw::RefmarkFieldUpdate aRefMarkHint;
     OSL_ENSURE(pDstTextField, "no field to update!");
 
     bool bTableSelBreak = false;
@@ -510,9 +509,7 @@ bool DocumentFieldsManager::UpdateField(SwTextField * 
pDstTextField, SwField & r
         if (m_rDoc.GetIDocumentUndoRedo().DoesUndo())
         {
             SwPosition aPosition( pDstTextField->GetTextNode(), 
pDstTextField->GetStart() );
-
-            m_rDoc.GetIDocumentUndoRedo().AppendUndo(
-                std::make_unique<SwUndoFieldFromDoc>( aPosition, *pDstField, 
rSrcField, pMsgHint, bUpdateFields) );
+            
m_rDoc.GetIDocumentUndoRedo().AppendUndo(std::make_unique<SwUndoFieldFromDoc>(aPosition,
 *pDstField, rSrcField, bUpdateFields));
         }
 
         pDstFormatField->SetField(rSrcField.CopyField());
@@ -574,7 +571,7 @@ bool DocumentFieldsManager::UpdateField(SwTextField * 
pDstTextField, SwField & r
             [[fallthrough]];
 
         default:
-            pDstFormatField->UpdateTextNode(nullptr, pMsgHint);
+            pDstFormatField->ForceUpdateTextNode();
         }
 
         // The fields we can calculate here are being triggered for an update
@@ -711,7 +708,7 @@ void DocumentFieldsManager::UpdateTableFields(const 
SwTable* pTable)
                 }
                 oCalc->SetCalcError( SwCalcError::NONE );
             }
-            pFormatField->UpdateTextNode(nullptr, nullptr);
+            pFormatField->ForceUpdateTextNode();
         }
     }
 
diff --git a/sw/source/core/edit/edfld.cxx b/sw/source/core/edit/edfld.cxx
index 1273309b5a8e..f77ae8d97e07 100644
--- a/sw/source/core/edit/edfld.cxx
+++ b/sw/source/core/edit/edfld.cxx
@@ -206,10 +206,6 @@ void SwEditShell::UpdateOneField(SwField &rField)
         SwPaM* pCursor = GetCursor();
         SwTextField *pTextField;
         SwFormatField *pFormatField;
-        static const SwMsgPoolItem aRefMarkHint(RES_REFMARKFLD_UPDATE);
-        const SwMsgPoolItem* pRefMarkHint = SwFieldIds::GetRef == 
rField.GetTyp()->Which() // is this conditional even needed?
-            ? &aRefMarkHint
-            : nullptr;
 
         if ( !pCursor->IsMultiSelection() && !pCursor->HasMark())
         {
@@ -223,7 +219,6 @@ void SwEditShell::UpdateOneField(SwField &rField)
                 GetDoc()->getIDocumentFieldsAccess().UpdateField(
                     pTextField,
                     rField,
-                    pRefMarkHint,
                     true);
             }
         }
@@ -278,7 +273,6 @@ void SwEditShell::UpdateOneField(SwField &rField)
                         bTableSelBreak = 
GetDoc()->getIDocumentFieldsAccess().UpdateField(
                             pTextField,
                             rField,
-                            pRefMarkHint,
                             false);
                     }
                     // The search area is reduced by the found area:
diff --git a/sw/source/core/inc/DocumentFieldsManager.hxx 
b/sw/source/core/inc/DocumentFieldsManager.hxx
index f7a8f2757fc0..75f2926474c8 100644
--- a/sw/source/core/inc/DocumentFieldsManager.hxx
+++ b/sw/source/core/inc/DocumentFieldsManager.hxx
@@ -43,7 +43,7 @@ public:
     virtual void UpdateFields(bool bCloseDB) override;
     virtual void InsDeletedFieldType(SwFieldType &) override;
     virtual void PutValueToField(const SwPosition & rPos, const css::uno::Any& 
rVal, sal_uInt16 nWhich) override;
-    virtual bool UpdateField(SwTextField * rDstFormatField, SwField & 
rSrcField, const SwMsgPoolItem * pMsgHint, bool bUpdateTableFields) override;
+    virtual bool UpdateField(SwTextField* rDstFormatField, SwField& rSrcField, 
bool bUpdateTableFields) override;
     virtual void UpdateRefFields() override;
     virtual void UpdateTableFields(const SwTable* pTable) override;
     virtual void UpdateExpFields(SwTextField* pField, bool bUpdateRefFields) 
override;
diff --git a/sw/source/core/txtnode/atrfld.cxx 
b/sw/source/core/txtnode/atrfld.cxx
index a78ed5291590..a9b98554f74b 100644
--- a/sw/source/core/txtnode/atrfld.cxx
+++ b/sw/source/core/txtnode/atrfld.cxx
@@ -244,10 +244,9 @@ void SwFormatField::SwClientNotify( const SwModify& 
rModify, const SfxHint& rHin
     }
     else if (rHint.GetId() == SfxHintId::SwLegacyModify)
     {
-        auto pLegacyHint = static_cast<const sw::LegacyModifyHint*>(&rHint);
-        if( !mpTextField )
+        if(!mpTextField)
             return;
-        UpdateTextNode(pLegacyHint->m_pOld, pLegacyHint->m_pNew);
+        UpdateTextNode(rHint);
     }
     else if (rHint.GetId() == SfxHintId::SwFindFormatForField)
     {
@@ -395,8 +394,13 @@ void SwFormatField::UpdateDocPos(const SwTwips nDocPos)
 
     pTextNd->UpdateDocPos(nDocPos, mpTextField->GetStart());
 }
-void SwFormatField::UpdateTextNode(const SfxPoolItem* pOld, const SfxPoolItem* 
pNew)
+void SwFormatField::UpdateTextNode(const SfxHint& rHint)
 {
+    if(SfxHintId::SwLegacyModify != rHint.GetId())
+        return;
+    auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
+    auto pOld = pLegacy->m_pOld;
+    auto pNew = pLegacy->m_pNew;
     if (pOld == nullptr && pNew == nullptr)
     {
         ForceUpdateTextNode();
@@ -429,14 +433,6 @@ void SwFormatField::UpdateTextNode(const SfxPoolItem* 
pOld, const SfxPoolItem* p
         case RES_ATTRSET_CHG:
         case RES_FMT_CHG:
             break;
-        case RES_REFMARKFLD_UPDATE:
-            // update GetRef fields
-            if(SwFieldIds::GetRef == mpField->GetTyp()->Which())
-            {
-                // #i81002#
-                static_cast<SwGetRefField*>(mpField.get())->UpdateField( 
mpTextField );
-            }
-        [[fallthrough]];
         default:
             {
                 auto pType = mpField->GetTyp();
diff --git a/sw/source/core/undo/SwUndoField.cxx 
b/sw/source/core/undo/SwUndoField.cxx
index e4dfcf7bd8f1..57d615e04f8a 100644
--- a/sw/source/core/undo/SwUndoField.cxx
+++ b/sw/source/core/undo/SwUndoField.cxx
@@ -57,11 +57,10 @@ SwPosition SwUndoField::GetPosition()
 SwUndoFieldFromDoc::SwUndoFieldFromDoc(const SwPosition & rPos,
                          const SwField & rOldField,
                          const SwField & rNewField,
-                         const SwMsgPoolItem * _pHint, bool _bUpdate)
+                         bool _bUpdate)
     : SwUndoField(rPos)
     , m_pOldField(rOldField.CopyField())
     , m_pNewField(rNewField.CopyField())
-    , m_pHint(_pHint)
     , m_bUpdate(_bUpdate)
 {
     OSL_ENSURE(m_pOldField, "No old field!");
@@ -80,7 +79,7 @@ void SwUndoFieldFromDoc::UndoImpl(::sw::UndoRedoContext &)
 
     if (pField)
     {
-        m_pDoc->getIDocumentFieldsAccess().UpdateField(pTextField, 
*m_pOldField, m_pHint, m_bUpdate);
+        m_pDoc->getIDocumentFieldsAccess().UpdateField(pTextField, 
*m_pOldField, m_bUpdate);
     }
 }
 
@@ -91,7 +90,7 @@ void SwUndoFieldFromDoc::DoImpl()
 
     if (pField)
     {
-        m_pDoc->getIDocumentFieldsAccess().UpdateField(pTextField, 
*m_pNewField, m_pHint, m_bUpdate);
+        m_pDoc->getIDocumentFieldsAccess().UpdateField(pTextField, 
*m_pNewField, m_bUpdate);
         SwFormatField* pDstFormatField = 
const_cast<SwFormatField*>(&pTextField->GetFormatField());
 
         if 
(m_pDoc->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::Postit, 
OUString(), false) == pDstFormatField->GetField()->GetTyp())
diff --git a/sw/source/uibase/docvw/AnnotationWin.cxx 
b/sw/source/uibase/docvw/AnnotationWin.cxx
index b28c66f03650..3d350048055b 100644
--- a/sw/source/uibase/docvw/AnnotationWin.cxx
+++ b/sw/source/uibase/docvw/AnnotationWin.cxx
@@ -320,7 +320,7 @@ void SwAnnotationWin::UpdateData()
             SwTextField *const pTextField = mpFormatField->GetTextField();
             SwPosition aPosition( pTextField->GetTextNode(), 
pTextField->GetStart() );
             rUndoRedo.AppendUndo(
-                std::make_unique<SwUndoFieldFromDoc>(aPosition, *pOldField, 
*mpField, nullptr, true));
+                std::make_unique<SwUndoFieldFromDoc>(aPosition, *pOldField, 
*mpField, true));
         }
         // so we get a new layout of notes (anchor position is still the same 
and we would otherwise not get one)
         mrMgr.SetLayout();
@@ -474,7 +474,7 @@ void SwAnnotationWin::InitAnswer(OutlinerParaObject const & 
rText)
         SwTextField *const pTextField = mpFormatField->GetTextField();
         SwPosition aPosition( pTextField->GetTextNode(), 
pTextField->GetStart() );
         rUndoRedo.AppendUndo(
-            std::make_unique<SwUndoFieldFromDoc>(aPosition, *pOldField, 
*mpField, nullptr, true));
+            std::make_unique<SwUndoFieldFromDoc>(aPosition, *pOldField, 
*mpField, true));
     }
     mpOutliner->SetModifyHdl( LINK( this, SwAnnotationWin, ModifyHdl ) );
     mpOutliner->ClearModifyFlag();

Reply via email to