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();