(tdf#159377 related) sw: fix undo of table pasted in middle of paragraph
The problem is that the !bCanMoveBack path doesn't work if the insert
position's content index isn't 0.
(regression from commit fcd4222d36)
Change-Id: I746db2187ab8f2e24eb694dc94d7eea9f50e2d9f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180948
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
This commit is contained in:
@@ -159,6 +159,39 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf159377)
|
||||
CPPUNIT_ASSERT_EQUAL(SwNodeOffset(28), pDoc->GetNodes().Count());
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testPasteTableInMiddleOfParagraph)
|
||||
{
|
||||
createSwDoc();
|
||||
|
||||
SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
|
||||
|
||||
SwInsertTableOptions aTableOptions(SwInsertTableFlags::DefaultBorder, 0);
|
||||
pWrtShell->InsertTable(aTableOptions, /*nRows=*/2, /*nCols=*/2);
|
||||
pWrtShell->MoveTable(GotoPrevTable, fnTableStart);
|
||||
|
||||
dispatchCommand(mxComponent, u".uno:SelectTable"_ustr, {});
|
||||
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
||||
|
||||
pWrtShell->Undo();
|
||||
|
||||
pWrtShell->Insert(u"AB"_ustr);
|
||||
|
||||
pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
|
||||
|
||||
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
||||
|
||||
pWrtShell->Undo();
|
||||
|
||||
// the problem was that the A was missing
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("AB"),
|
||||
pWrtShell->GetCursor()->GetPointNode().GetTextNode()->GetText());
|
||||
|
||||
pWrtShell->Redo();
|
||||
pWrtShell->Undo();
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("AB"),
|
||||
pWrtShell->GetCursor()->GetPointNode().GetTextNode()->GetText());
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf111969)
|
||||
{
|
||||
// given a document with a field surrounded by N-dashes (–date–)
|
||||
|
||||
@@ -5153,7 +5153,9 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
|
||||
// Note this doesn't just check IsStartNode() because SwDoc::AppendDoc()
|
||||
// intentionally sets it to the body start node, perhaps it should just
|
||||
// call SplitNode instead?
|
||||
if (!pStart->GetNode().IsSectionNode() && !pStart->GetNode().IsTableNode())
|
||||
if ((!pStart->GetNode().IsSectionNode() && !pStart->GetNode().IsTableNode())
|
||||
|| (pCopyPam->GetPoint()->GetContentIndex() != 0 // also if node will split
|
||||
&& pCopyPam->GetPoint()->GetContentIndex() != pCopyPam->GetPoint()->GetNode().GetContentNode()->Len()))
|
||||
{
|
||||
bCanMoveBack = pCopyPam->Move(fnMoveBackward, GoInContent);
|
||||
}
|
||||
@@ -5347,7 +5349,7 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
|
||||
--aRg.aEnd;
|
||||
}
|
||||
}
|
||||
assert(!bCanMoveBack);
|
||||
assert((nDeleteTextNodes.get() != 0) == bCanMoveBack);
|
||||
}
|
||||
|
||||
pDestTextNd = aInsPos.GetNode().GetTextNode();
|
||||
|
||||
Reference in New Issue
Block a user