summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/uiwriter/uiwriter3.cxx45
-rw-r--r--sw/source/core/frmedt/fetab.cxx22
2 files changed, 50 insertions, 17 deletions
diff --git a/sw/qa/extras/uiwriter/uiwriter3.cxx b/sw/qa/extras/uiwriter/uiwriter3.cxx
index a7db089432e0..b8cb857043b2 100644
--- a/sw/qa/extras/uiwriter/uiwriter3.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter3.cxx
@@ -1989,6 +1989,51 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf146962)
assertXPath(pXmlDoc, "/root/page[1]/body/tab/row", 1);
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf147347)
+{
+ // load a 2-row table, set Hide Changes mode and delete the table with change tracking
+ SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf116789.fodt");
+ CPPUNIT_ASSERT(pDoc);
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT(pWrtShell);
+
+ // enable redlining
+ dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+ CPPUNIT_ASSERT_MESSAGE("redlining should be on",
+ pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ // hide changes
+ dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+ dispatchCommand(mxComponent, ".uno:DeleteTable", {});
+
+ // Without the fix in place, the deleted row would be visible
+
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // This was 1
+ assertXPath(pXmlDoc, "/root/page[1]/body/tab/row", 0);
+
+ // check it in Show Changes mode
+
+ dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+ CPPUNIT_ASSERT(!pWrtShell->GetLayout()->IsHideRedlines());
+
+ discardDumpedLayout();
+ pXmlDoc = parseLayoutDump();
+ // 2 rows are visible now
+ assertXPath(pXmlDoc, "/root/page[1]/body/tab/row", 2);
+
+ // check it in Hide Changes mode again
+
+ dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+ discardDumpedLayout();
+ pXmlDoc = parseLayoutDump();
+ // no visible row again
+ assertXPath(pXmlDoc, "/root/page[1]/body/tab/row", 0);
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf135014)
{
createSwDoc();
diff --git a/sw/source/core/frmedt/fetab.cxx b/sw/source/core/frmedt/fetab.cxx
index 7bb2ff5edc68..ecb7cfc39f2a 100644
--- a/sw/source/core/frmedt/fetab.cxx
+++ b/sw/source/core/frmedt/fetab.cxx
@@ -480,26 +480,14 @@ bool SwFEShell::DeleteRow(bool bCompleteTable)
pPam->DeleteMark();
}
- // remove row frames in Hide Changes mode
+ // remove row frames in Hide Changes mode (and table frames, if needed)
if ( bRecordAndHideChanges )
{
- for (auto & rpFndLine : aFndBox.GetLines())
+ pTableNd->DelFrames();
+ if ( !pTableNd->GetTable().IsDeleted() )
{
- SwTableLine* pTmpLine = rpFndLine->GetLine();
- SwIterator<SwRowFrame,SwFormat> aIt( *pTmpLine->GetFrameFormat() );
- for( SwRowFrame* pRowFrame = aIt.First(); pRowFrame; pRowFrame = aIt.Next() )
- {
- auto pTabFrame = pRowFrame->GetUpper();
- // FIXME remove table frame instead of keeping the last row frame
- if ( pTabFrame->IsTabFrame() && pTabFrame->Lower() == pTabFrame->GetLastLower() )
- break;
-
- if( pRowFrame->GetTabLine() == pTmpLine )
- {
- pRowFrame->RemoveFromLayout();
- SwFrame::DestroyFrame(pRowFrame);
- }
- }
+ SwNodeIndex aTableIdx( *pTableNd->EndOfSectionNode(), 1 );
+ pTableNd->MakeOwnFrames(&aTableIdx);
}
EndAllActionAndCall();