sw/qa/extras/uiwriter/uiwriter.cxx                      |   38 ++++++++++++++++
 sw/source/core/doc/DocumentContentOperationsManager.cxx |    5 ++
 2 files changed, 43 insertions(+)

New commits:
commit 1f8795df957c18c5c06bf1d68d0d60b1d30f015d
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Tue May 17 16:08:39 2022 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Tue May 17 20:00:51 2022 +0200

    tdf#147220 sw_redlinehide: update frames in ReplaceRangeImpl()
    
    Change-Id: Ie5d62eaec01a3b06ff1bd6070510384641ea7ad3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134483
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx 
b/sw/qa/extras/uiwriter/uiwriter.cxx
index 3e93508ed057..c1a77a6b8747 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -59,6 +59,7 @@
 #include <comphelper/processfactory.hxx>
 #include <unotxdoc.hxx>
 #include <rootfrm.hxx>
+#include <txtfrm.hxx>
 
 namespace
 {
@@ -374,6 +375,43 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf67238)
     
CPPUNIT_ASSERT(!((rTable.GetTableBox("C3"))->GetFrameFormat()->GetProtect()).IsContentProtected());
 }
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf147220)
+{
+    SwDoc* pDoc = createSwDoc();
+    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+    pWrtShell->Insert(u"él");
+
+    // hide and enable
+    dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+    dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+    CPPUNIT_ASSERT(pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+    CPPUNIT_ASSERT(
+        
IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+    CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+    pWrtShell->GoStartSentence();
+    pWrtShell->SetMark();
+    pWrtShell->GoEndSentence();
+
+    // this did not remove the original text from the layout
+    pWrtShell->Replace(u"Él", false);
+
+    // currently the deleted text is before the replacement text, not sure if
+    // that is really required
+    CPPUNIT_ASSERT_EQUAL(OUString(u"élÉl"),
+        
pWrtShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->GetText());
+    CPPUNIT_ASSERT_EQUAL(OUString(u"Él"),
+        static_cast<SwTextFrame 
const*>(pWrtShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->getLayoutFrame(nullptr))->GetText());
+
+    SwRedlineTable const& 
rRedlines(pDoc->getIDocumentRedlineAccess().GetRedlineTable());
+    CPPUNIT_ASSERT_EQUAL(SwRedlineTable::size_type(2), rRedlines.size());
+    CPPUNIT_ASSERT_EQUAL(RedlineType::Delete, rRedlines[0]->GetType());
+    CPPUNIT_ASSERT_EQUAL(OUString(u"él"), rRedlines[0]->GetText());
+    CPPUNIT_ASSERT_EQUAL(RedlineType::Insert, rRedlines[1]->GetType());
+    CPPUNIT_ASSERT_EQUAL(OUString(u"Él"), rRedlines[1]->GetText());
+}
+
 CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf135978)
 {
     SwDoc* pDoc = createSwDoc();
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx 
b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 8fc4525c8e2e..c8797ae48d08 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -4602,7 +4602,12 @@ bool DocumentContentOperationsManager::ReplaceRangeImpl( 
SwPaM& rPam, const OUSt
                 m_rDoc.GetIDocumentUndoRedo().AppendUndo(
                     std::make_unique<SwUndoRedlineDelete>( aDelPam, 
SwUndoId::REPLACE ));
             }
+            // add redline similar to DeleteAndJoinWithRedlineImpl()
+            std::shared_ptr<SwUnoCursor> const 
pCursor(m_rDoc.CreateUnoCursor(*aDelPam.GetMark()));
+            pCursor->SetMark();
+            *pCursor->GetPoint() = *aDelPam.GetPoint();
             m_rDoc.getIDocumentRedlineAccess().AppendRedline( new 
SwRangeRedline( RedlineType::Delete, aDelPam ), true);
+            sw::UpdateFramesForAddDeleteRedline(m_rDoc, *pCursor);
 
             *rPam.GetMark() = *aDelPam.GetMark();
             if (m_rDoc.GetIDocumentUndoRedo().DoesUndo())

Reply via email to