sw/qa/extras/uiwriter/data/tdf129270.odt |binary sw/qa/extras/uiwriter/uiwriter4.cxx | 26 ++++++++++++++++++++++++++ sw/source/core/txtnode/ndtxt.cxx | 10 +++++++++- 3 files changed, 35 insertions(+), 1 deletion(-)
New commits: commit 41c30076dded61163d3c765eb897bf6a62f75120 Author: Vasily Melenchuk <[email protected]> AuthorDate: Mon Aug 9 18:42:02 2021 +0300 Commit: Michael Stahl <[email protected]> CommitDate: Fri Aug 13 10:28:35 2021 +0200 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 <[email protected]> (cherry picked from commit a72f2dcf73df9b9f4420cc93aa57a77c165a0fcb) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120358 diff --git a/sw/qa/extras/uiwriter/data/tdf129270.odt b/sw/qa/extras/uiwriter/data/tdf129270.odt new file mode 100644 index 000000000000..e86c1f872153 Binary files /dev/null and b/sw/qa/extras/uiwriter/data/tdf129270.odt differ diff --git a/sw/qa/extras/uiwriter/uiwriter4.cxx b/sw/qa/extras/uiwriter/uiwriter4.cxx index 3d008a7e1801..ac0938d28624 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(); }; @@ -3613,6 +3615,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 da69da7209d3..b4b70f52c7f9 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); } }
