sw/inc/fldbas.hxx | 3 +++ sw/inc/fmtfld.hxx | 10 ++++++++++ sw/source/core/fields/fldbas.cxx | 6 ++++++ sw/source/core/txtnode/atrfld.cxx | 12 +++++++++--- sw/source/uibase/wrtsh/wrtsh1.cxx | 13 ++----------- 5 files changed, 30 insertions(+), 14 deletions(-)
New commits: commit 6b2b0af1936ddc57992b01a56725d4acadffc806 Author: Bjoern Michaelsen <bjoern.michael...@libreoffice.org> AuthorDate: Sat Feb 8 12:19:17 2020 +0100 Commit: Björn Michaelsen <bjoern.michael...@libreoffice.org> CommitDate: Sat Feb 8 21:40:00 2020 +0100 introduce SwFieldType::FindFormatForField and use it (once) Change-Id: Id7136b936c0585e7013f3d06ad97436b51522da3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88264 Tested-by: Jenkins Reviewed-by: Björn Michaelsen <bjoern.michael...@libreoffice.org> diff --git a/sw/inc/fldbas.hxx b/sw/inc/fldbas.hxx index 664f74b45242..19fad702c4ad 100644 --- a/sw/inc/fldbas.hxx +++ b/sw/inc/fldbas.hxx @@ -28,6 +28,8 @@ #include <climits> class SwDoc; +class SwField; +class SwFormatField; class SwRootFrame; class SvNumberFormatter; namespace com { namespace sun { namespace star { namespace beans { class XPropertySet; } } } } @@ -267,6 +269,7 @@ public: inline void UpdateFields() const; virtual void dumpAsXml(xmlTextWriterPtr pWriter) const; + SwFormatField* FindFormatForField(const SwField*) const; }; inline void SwFieldType::UpdateFields() const diff --git a/sw/inc/fmtfld.hxx b/sw/inc/fmtfld.hxx index cde0efe48f5a..7857b9915c6b 100644 --- a/sw/inc/fmtfld.hxx +++ b/sw/inc/fmtfld.hxx @@ -31,8 +31,18 @@ class SwField; class SwTextField; class SwView; class SwFieldType; +class SwFormatField; namespace com { namespace sun { namespace star { namespace text { class XTextField; } } } } +namespace sw { + struct FindFormatForFieldHint final : SfxHint { + const SwField* m_pField; + SwFormatField*& m_rpFormat; + FindFormatForFieldHint(const SwField* pField, SwFormatField*& rpFormat) : m_pField(pField), m_rpFormat(rpFormat) {}; + }; +} + + // ATT_FLD class SW_DLLPUBLIC SwFormatField final : public SfxPoolItem diff --git a/sw/source/core/fields/fldbas.cxx b/sw/source/core/fields/fldbas.cxx index cb69dde129fe..252fa47584d1 100644 --- a/sw/source/core/fields/fldbas.cxx +++ b/sw/source/core/fields/fldbas.cxx @@ -156,6 +156,12 @@ void SwFieldType::dumpAsXml(xmlTextWriterPtr pWriter) const xmlTextWriterEndElement(pWriter); } +SwFormatField* SwFieldType::FindFormatForField(const SwField* pField) const { + SwFormatField* pFormat = nullptr; + CallSwClientNotify(sw::FindFormatForFieldHint(pField, pFormat)); + return pFormat; +} + void SwFieldTypes::dumpAsXml(xmlTextWriterPtr pWriter) const { xmlTextWriterStartElement(pWriter, BAD_CAST("SwFieldTypes")); diff --git a/sw/source/core/txtnode/atrfld.cxx b/sw/source/core/txtnode/atrfld.cxx index 4f0bbaf9a7cc..91261b6bedfb 100644 --- a/sw/source/core/txtnode/atrfld.cxx +++ b/sw/source/core/txtnode/atrfld.cxx @@ -223,11 +223,11 @@ void SwFormatField::InvalidateField() void SwFormatField::SwClientNotify( const SwModify& rModify, const SfxHint& rHint ) { SwClient::SwClientNotify(rModify, rHint); - if( !mpTextField ) - return; - if (const SwFieldHint* pFieldHint = dynamic_cast<const SwFieldHint*>( &rHint )) { + if( !mpTextField ) + return; + // replace field content by text SwPaM* pPaM = pFieldHint->m_pPaM; SwDoc* pDoc = pPaM->GetDoc(); @@ -242,7 +242,13 @@ void SwFormatField::SwClientNotify( const SwModify& rModify, const SfxHint& rHin pDoc->getIDocumentContentOperations().InsertString( *pPaM, aEntry ); } else if (const sw::LegacyModifyHint* pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>( &rHint )) { + if( !mpTextField ) + return; UpdateTextNode(pLegacyHint->m_pOld, pLegacyHint->m_pNew); + } else if (const sw::FindFormatForFieldHint* pFindForFieldHint = dynamic_cast<const sw::FindFormatForFieldHint*>( &rHint )) + { + if(pFindForFieldHint->m_rpFormat == nullptr && pFindForFieldHint->m_pField == GetField()) + pFindForFieldHint->m_rpFormat = this; } } diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx index fdb4c56938d7..4225c59b68ec 100644 --- a/sw/source/uibase/wrtsh/wrtsh1.cxx +++ b/sw/source/uibase/wrtsh/wrtsh1.cxx @@ -1978,17 +1978,8 @@ void SwWrtShell::InsertPostIt(SwFieldMgr& rFieldMgr, const SfxRequest& rReq) if (pPostIt) { SwFieldType* pType = GetDoc()->getIDocumentFieldsAccess().GetFieldType(SwFieldIds::Postit, OUString(), false); - SwIterator<SwFormatField,SwFieldType> aIter( *pType ); - SwFormatField* pSwFormatField = aIter.First(); - while( pSwFormatField ) - { - if ( pSwFormatField->GetField() == pPostIt ) - { - pSwFormatField->Broadcast( SwFormatFieldHint( nullptr, SwFormatFieldHintWhich::FOCUS, &GetView() ) ); - break; - } - pSwFormatField = aIter.Next(); - } + if(auto pFormat = pType->FindFormatForField(pPostIt)) + pFormat->Broadcast( SwFormatFieldHint( nullptr, SwFormatFieldHintWhich::FOCUS, &GetView() ) ); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits