diff options
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter3.cxx | 45 | ||||
-rw-r--r-- | sw/source/core/frmedt/fetab.cxx | 22 |
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(); |