diff options
author | Michael Stahl <michael.stahl@allotropia.de> | 2024-03-01 14:30:42 +0100 |
---|---|---|
committer | Michael Stahl <michael.stahl@allotropia.de> | 2024-03-04 11:23:44 +0100 |
commit | cf4df3e51b609613134e3146f526d8e6b07946c3 (patch) | |
tree | e88a5374a3da76294978f5d7b6d2419930c02522 /sw | |
parent | 3b044878a411e50775e2fbdb5f2715b6f62ec038 (diff) |
sw: for Undo, add FLY_AT_PAGE in GetFlysAnchoredAt()
SwUndoInserts::IsCreateUndoForNewFly() now returns true for these, so
they get Undo objects on Paste, which is of course wrong.
(regression from commit 359e5af31c330a137fed6ba3140b77cd759c28bb)
Change-Id: Id5abb38c662a9c55826cde6d8b151613c852de72
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164221
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/inc/undobj.hxx | 2 | ||||
-rw-r--r-- | sw/source/core/doc/DocumentContentOperationsManager.cxx | 2 | ||||
-rw-r--r-- | sw/source/core/txtnode/ndtxt.cxx | 2 | ||||
-rw-r--r-- | sw/source/core/undo/untblk.cxx | 15 |
4 files changed, 11 insertions, 10 deletions
diff --git a/sw/inc/undobj.hxx b/sw/inc/undobj.hxx index 03ad720aabe7..7fb61309ec29 100644 --- a/sw/inc/undobj.hxx +++ b/sw/inc/undobj.hxx @@ -244,7 +244,7 @@ class SwUndoInsLayFormat; namespace sw { std::optional<std::vector<SwFrameFormat*>> -GetFlysAnchoredAt(SwDoc & rDoc, SwNodeOffset nSttNode); +GetFlysAnchoredAt(SwDoc & rDoc, SwNodeOffset nSttNode, bool isAtPageIncluded); } diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx index e799555b9dd7..1c3df58bd6cd 100644 --- a/sw/source/core/doc/DocumentContentOperationsManager.cxx +++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx @@ -5066,7 +5066,7 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo } else { - pFlys = sw::GetFlysAnchoredAt(rDoc, rPos.GetNodeIndex()); + pFlys = sw::GetFlysAnchoredAt(rDoc, rPos.GetNodeIndex(), false); pFlysAtInsPos = pFlys ? &*pFlys : nullptr; } diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx index dc2625d33c54..bbb725e5c13c 100644 --- a/sw/source/core/txtnode/ndtxt.cxx +++ b/sw/source/core/txtnode/ndtxt.cxx @@ -462,7 +462,7 @@ SwTextNode *SwTextNode::SplitContentNode(const SwPosition & rPos, } bool bSplitFly = false; - std::optional<std::vector<SwFrameFormat*>> oFlys = sw::GetFlysAnchoredAt(GetDoc(), GetIndex()); + std::optional<std::vector<SwFrameFormat*>> oFlys = sw::GetFlysAnchoredAt(GetDoc(), GetIndex(), false); if (oFlys.has_value()) { // See if one of the flys is a split fly. If so, we need to keep diff --git a/sw/source/core/undo/untblk.cxx b/sw/source/core/undo/untblk.cxx index 158167809712..328d901ca482 100644 --- a/sw/source/core/undo/untblk.cxx +++ b/sw/source/core/undo/untblk.cxx @@ -38,7 +38,7 @@ namespace sw { std::optional<std::vector<SwFrameFormat*>> -GetFlysAnchoredAt(SwDoc & rDoc, SwNodeOffset const nSttNode) +GetFlysAnchoredAt(SwDoc & rDoc, SwNodeOffset const nSttNode, bool const isAtPageIncluded) { std::optional<std::vector<SwFrameFormat*>> pFrameFormats; const size_t nArrLen = rDoc.GetSpzFrameFormats()->size(); @@ -47,10 +47,11 @@ GetFlysAnchoredAt(SwDoc & rDoc, SwNodeOffset const nSttNode) SwFrameFormat *const pFormat = (*rDoc.GetSpzFrameFormats())[n]; SwFormatAnchor const*const pAnchor = &pFormat->GetAnchor(); SwNode const*const pAnchorNode = pAnchor->GetAnchorNode(); - if (pAnchorNode - && nSttNode == pAnchorNode->GetIndex() - && ((pAnchor->GetAnchorId() == RndStdIds::FLY_AT_PARA) - || (pAnchor->GetAnchorId() == RndStdIds::FLY_AT_CHAR))) + if ((pAnchorNode + && nSttNode == pAnchorNode->GetIndex() + && ((pAnchor->GetAnchorId() == RndStdIds::FLY_AT_PARA) + || (pAnchor->GetAnchorId() == RndStdIds::FLY_AT_CHAR))) + || (isAtPageIncluded && pAnchor->GetAnchorId() == RndStdIds::FLY_AT_PAGE)) { if (!pFrameFormats) pFrameFormats.emplace(); @@ -89,7 +90,7 @@ SwUndoInserts::SwUndoInserts( SwUndoId nUndoId, const SwPaM& rPam ) // These flys will be saved in pFrameFormats array (only flys which exist BEFORE insertion!) // Then in SwUndoInserts::SetInsertRange the flys saved in pFrameFormats will NOT create Undos. // m_FlyUndos will only be filled with newly inserted flys. - m_pFrameFormats = sw::GetFlysAnchoredAt(rDoc, m_nSttNode); + m_pFrameFormats = sw::GetFlysAnchoredAt(rDoc, m_nSttNode, true); } // consider Redline if( rDoc.getIDocumentRedlineAccess().IsRedlineOn() ) @@ -392,7 +393,7 @@ void SwUndoInserts::RedoImpl(::sw::UndoRedoContext & rContext) if( ( m_nSttNode != m_nEndNode || m_nSttContent != m_nEndContent ) && m_oUndoNodeIndex) { auto const pFlysAtInsPos(sw::GetFlysAnchoredAt(rDoc, - rPam.GetPoint()->GetNodeIndex())); + rPam.GetPoint()->GetNodeIndex(), false)); ::std::optional<SwNodeIndex> oMvBkwrd = MovePtBackward(rPam); |