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);
        }
    }