[Libreoffice-commits] core.git: sw/qa sw/source

László Németh (via logerrit) logerrit at kemper.freedesktop.org
Sat Oct 24 12:27:33 UTC 2020


 sw/qa/extras/uiwriter/uiwriter2.cxx |   33 +++++++++++++++++++++++++++++++++
 sw/source/core/undo/unredln.cxx     |    6 ++++++
 2 files changed, 39 insertions(+)

New commits:
commit fe1fc9615511994ac128e52f9ad1cda4e86188f5
Author:     László Németh <nemeth at numbertext.org>
AuthorDate: Thu Oct 22 17:49:56 2020 +0200
Commit:     László Németh <nemeth at numbertext.org>
CommitDate: Sat Oct 24 14:26:51 2020 +0200

    tdf#137684 sw ChangesInMargin: fix crash on Undo of characters
    
    deleted by pressing Delete.
    
    Follow-up of commit 62596e7f52492305b49dab70bdf81daf82b930a1
    (tdf#137526 sw ChangesInMargin: fix Undo of deleted words).
    
    Change-Id: I1a3c3e446f67de94ff3b750b45421f9bc93e5cc2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104691
    Tested-by: Jenkins
    Reviewed-by: László Németh <nemeth at numbertext.org>

diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index b59708576b6b..0d3b1aee820c 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -1892,6 +1892,39 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf137526)
     CPPUNIT_ASSERT(!pWrtShell->GetViewOptions()->IsShowChangesInMargin());
 }
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf137684)
+{
+    load(DATA_DIRECTORY, "tdf132160.odt");
+
+    SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+    CPPUNIT_ASSERT(pTextDoc);
+
+    // switch on "Show changes in margin" mode
+    dispatchCommand(mxComponent, ".uno:ShowChangesInMargin", {});
+
+    SwWrtShell* const pWrtShell = pTextDoc->GetDocShell()->GetWrtShell();
+    CPPUNIT_ASSERT(pWrtShell->GetViewOptions()->IsShowChangesInMargin());
+
+    // select and delete a word letter by letter
+    for (int i = 0; i <= 10; ++i)
+    {
+        dispatchCommand(mxComponent, ".uno:Delete", {});
+    }
+    CPPUNIT_ASSERT(getParagraph(1)->getString().startsWith("support"));
+
+    // this would crash due to bad redline range
+    for (int i = 0; i <= 10; ++i)
+    {
+        dispatchCommand(mxComponent, ".uno:Undo", {});
+    }
+    // TODO: fix order of the characters after Undo
+    CPPUNIT_ASSERT(getParagraph(1)->getString().startsWith(" noitpyrcnE"));
+
+    // switch off "Show changes in margin" mode
+    dispatchCommand(mxComponent, ".uno:ShowChangesInMargin", {});
+    CPPUNIT_ASSERT(!pWrtShell->GetViewOptions()->IsShowChangesInMargin());
+}
+
 CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf52391)
 {
     load(DATA_DIRECTORY, "tdf52391.fodt");
diff --git a/sw/source/core/undo/unredln.cxx b/sw/source/core/undo/unredln.cxx
index d2d60b60841f..1d48861a4432 100644
--- a/sw/source/core/undo/unredln.cxx
+++ b/sw/source/core/undo/unredln.cxx
@@ -97,6 +97,12 @@ void SwUndoRedline::UndoImpl(::sw::UndoRedoContext & rContext)
     if ( pRedline && !pRedline->IsVisible() )
     {
         const SwRedlineTable& rTable = rDoc.getIDocumentRedlineAccess().GetRedlineTable();
+        // skip older redlines in the same position
+        while ( nCurRedlinePos + 1 < rTable.size() &&
+            *pRedline->GetPoint() == *rTable[nCurRedlinePos + 1]->GetPoint() )
+        {
+            ++nCurRedlinePos;
+        }
         SwRangeRedline * pHiddenRedline( rTable[nCurRedlinePos] );
         pHiddenRedline->Show(0, rTable.GetPos(pHiddenRedline), /*bForced=*/true);
         pHiddenRedline->Show(1, rTable.GetPos(pHiddenRedline), /*bForced=*/true);


More information about the Libreoffice-commits mailing list