summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2024-03-01 14:30:42 +0100
committerMichael Stahl <michael.stahl@allotropia.de>2024-03-04 11:23:44 +0100
commitcf4df3e51b609613134e3146f526d8e6b07946c3 (patch)
treee88a5374a3da76294978f5d7b6d2419930c02522 /sw
parent3b044878a411e50775e2fbdb5f2715b6f62ec038 (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.hxx2
-rw-r--r--sw/source/core/doc/DocumentContentOperationsManager.cxx2
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx2
-rw-r--r--sw/source/core/undo/untblk.cxx15
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);