tdf#129270: sw: do not copy list level on paragraph cut
Current list level (RES_PARATR_LIST_LEVEL) is initialized
before, but current value can overwrite it with invalid
in given context. So we could have mismatch of outline
style (which are not overwritten) and actual list level.
Change-Id: Ibf34a6f35b922493c4a1477326ea6c1599b4938f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120212
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
diff --git a/sw/qa/extras/uiwriter/data/tdf129270.odt b/sw/qa/extras/uiwriter/data/tdf129270.odt
new file mode 100644
index 0000000..e86c1f8
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/tdf129270.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/uiwriter4.cxx b/sw/qa/extras/uiwriter/uiwriter4.cxx
index d93447d..e079ff0 100644
--- a/sw/qa/extras/uiwriter/uiwriter4.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter4.cxx
@@ -278,6 +278,7 @@ public:
void testRedlineAutoCorrect();
void testRedlineAutoCorrect2();
void testEmojiAutoCorrect();
void testTdf129270();
void testInsertPdf();
CPPUNIT_TEST_SUITE(SwUiWriterTest4);
@@ -393,6 +394,7 @@ public:
CPPUNIT_TEST(testRedlineAutoCorrect);
CPPUNIT_TEST(testRedlineAutoCorrect2);
CPPUNIT_TEST(testEmojiAutoCorrect);
CPPUNIT_TEST(testTdf129270);
CPPUNIT_TEST(testInsertPdf);
CPPUNIT_TEST_SUITE_END();
};
@@ -3602,6 +3604,30 @@ void SwUiWriterTest4::testInsertLongDateFormat()
CPPUNIT_ASSERT(xField->getString().indexOf(" ") > -1);
}
void SwUiWriterTest4::testTdf129270()
{
SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf129270.odt");
CPPUNIT_ASSERT(pDoc);
SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
CPPUNIT_ASSERT(pWrtShell);
SwXTextDocument* pXTextDocument = dynamic_cast<SwXTextDocument*>(mxComponent.get());
CPPUNIT_ASSERT(pXTextDocument);
// Go to document end
pWrtShell->SttEndDoc(/*bStt=*/false);
// Press enter
pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN);
Scheduler::ProcessEventsToIdle();
// Numbering for previous outline should remain the same "2"
CPPUNIT_ASSERT_EQUAL(OUString("2"), getProperty<OUString>(getParagraph(4), "ListLabelString"));
// Numbering for newly created outline should be "2.1"
CPPUNIT_ASSERT_EQUAL(OUString("2.1"),
getProperty<OUString>(getParagraph(5), "ListLabelString"));
}
void SwUiWriterTest4::testInsertPdf()
{
auto pPdfium = vcl::pdf::PDFiumLibrary::get();
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index c654557..626b3b2 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -2497,7 +2497,15 @@ void SwTextNode::CutImpl( SwTextNode * const pDest, const SwIndex & rDestStart,
}
else
{
GetpSwAttrSet()->CopyToModify( *pDest );
// Copy all attrs except RES_PARATR_LIST_LEVEL: it was initialized before
// and current SwTextNode can contain not suitable for pDest value
SfxItemSet aCharSet(
pDest->GetDoc().GetAttrPool(),
svl::Items<RES_CHRATR_BEGIN, RES_PARATR_LIST_LEVEL - 1,
RES_PARATR_LIST_LEVEL + 1, HINT_END>);
aCharSet.Put(*GetpSwAttrSet());
if (aCharSet.Count())
pDest->SetAttr(aCharSet, nDestStart, nDestStart + nLen);
}
}