[Libreoffice-commits] core.git: sw/source
Bjoern Michaelsen (via logerrit)
logerrit at kemper.freedesktop.org
Sun Sep 13 08:51:49 UTC 2020
sw/source/core/inc/UndoAttribute.hxx | 11 +++---
sw/source/core/undo/unattr.cxx | 56 ++++++++++++++++-------------------
2 files changed, 32 insertions(+), 35 deletions(-)
New commits:
commit ad7558404ddf9de224c3cd28b6dccfefb0d0ea80
Author: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
AuthorDate: Fri Sep 11 23:30:37 2020 +0200
Commit: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
CommitDate: Sun Sep 13 10:51:15 2020 +0200
SwUndoFormatAttrHelper: tweak out some SwClient stuff ...
- make it final for starters
- dont use GetRegistered() variants to prepare removal of
SwClient/SwModify
- dont use CheckRegistration() as the observed format should never die
Change-Id: I9bfb587e5e88896eb36d2da6edcf4f41a93195cd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102500
Tested-by: Jenkins
Reviewed-by: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
diff --git a/sw/source/core/inc/UndoAttribute.hxx b/sw/source/core/inc/UndoAttribute.hxx
index cc73197fd7c6..35247cf4d16f 100644
--- a/sw/source/core/inc/UndoAttribute.hxx
+++ b/sw/source/core/inc/UndoAttribute.hxx
@@ -160,19 +160,20 @@ public:
};
// helper class to receive changed attribute sets
-class SwUndoFormatAttrHelper : public SwClient
+class SwUndoFormatAttrHelper final : public SwClient
{
+ SwFormat& m_rFormat;
std::unique_ptr<SwUndoFormatAttr> m_pUndo;
const bool m_bSaveDrawPt;
public:
- SwUndoFormatAttrHelper( SwFormat& rFormat, bool bSaveDrawPt = true );
+ SwUndoFormatAttrHelper(SwFormat& rFormat, bool bSaveDrawPt = true);
- virtual void Modify( const SfxPoolItem*, const SfxPoolItem* ) override;
+ virtual void SwClientNotify(const SwModify&, const SfxHint&) override;
- SwUndoFormatAttr* GetUndo() const { return m_pUndo.get(); }
+ SwUndoFormatAttr* GetUndo() const { return m_pUndo.get(); }
// release the undo object (so it is not deleted here), and return it
- std::unique_ptr<SwUndoFormatAttr> ReleaseUndo() { return std::move(m_pUndo); }
+ std::unique_ptr<SwUndoFormatAttr> ReleaseUndo() { return std::move(m_pUndo); }
};
class SwUndoMoveLeftMargin : public SwUndo, private SwUndRng
diff --git a/sw/source/core/undo/unattr.cxx b/sw/source/core/undo/unattr.cxx
index 715de15ef295..905c55d97243 100644
--- a/sw/source/core/undo/unattr.cxx
+++ b/sw/source/core/undo/unattr.cxx
@@ -54,40 +54,36 @@
#include <calbck.hxx>
#include <frameformats.hxx>
-SwUndoFormatAttrHelper::SwUndoFormatAttrHelper( SwFormat& rFormat, bool bSvDrwPt )
- : SwClient( &rFormat )
- , m_bSaveDrawPt( bSvDrwPt )
+SwUndoFormatAttrHelper::SwUndoFormatAttrHelper(SwFormat& rFormat, bool bSvDrwPt)
+ : SwClient(&rFormat)
+ , m_rFormat(rFormat)
+ , m_bSaveDrawPt(bSvDrwPt)
{
}
-void SwUndoFormatAttrHelper::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
+void SwUndoFormatAttrHelper::SwClientNotify(const SwModify&, const SfxHint& rHint)
{
- if( !pOld ) return;
-
- if ( pOld->Which() == RES_OBJECTDYING ) {
- CheckRegistration( pOld );
- } else if ( pNew ) {
- const SwDoc& rDoc = *static_cast<SwFormat*>(GetRegisteredInNonConst())->GetDoc();
- if( POOLATTR_END >= pOld->Which() ) {
- if ( GetUndo() ) {
- m_pUndo->PutAttr( *pOld, rDoc );
- } else {
- m_pUndo.reset( new SwUndoFormatAttr( *pOld,
- *static_cast<SwFormat*>(GetRegisteredInNonConst()), m_bSaveDrawPt ) );
- }
- } else if ( RES_ATTRSET_CHG == pOld->Which() ) {
- if ( GetUndo() ) {
- SfxItemIter aIter(
- *static_cast<const SwAttrSetChg*>(pOld)->GetChgSet() );
- for (auto pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
- {
- m_pUndo->PutAttr( *pItem, rDoc );
- }
- } else {
- m_pUndo.reset( new SwUndoFormatAttr(
- *static_cast<const SwAttrSetChg*>(pOld)->GetChgSet(),
- *static_cast<SwFormat*>(GetRegisteredInNonConst()), m_bSaveDrawPt ) );
- }
+ auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
+ if(!pLegacy || !pLegacy->m_pOld)
+ return;
+ assert(pLegacy->m_pOld->Which() != RES_OBJECTDYING);
+ if(!pLegacy->m_pNew)
+ return;
+ const SwDoc& rDoc = *m_rFormat.GetDoc();
+ auto pOld = pLegacy->m_pOld;
+ if(POOLATTR_END >= pLegacy->m_pOld->Which()) {
+ if(!GetUndo())
+ m_pUndo.reset(new SwUndoFormatAttr(*pOld, m_rFormat, m_bSaveDrawPt));
+ else
+ m_pUndo->PutAttr(*pOld, rDoc);
+ } else if(RES_ATTRSET_CHG == pOld->Which()) {
+ auto& rChgSet = *static_cast<const SwAttrSetChg*>(pOld)->GetChgSet();
+ if(!GetUndo())
+ m_pUndo.reset(new SwUndoFormatAttr(rChgSet, m_rFormat, m_bSaveDrawPt));
+ else {
+ SfxItemIter aIter(rChgSet);
+ for(auto pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem())
+ m_pUndo->PutAttr(*pItem, rDoc);
}
}
}
More information about the Libreoffice-commits
mailing list