diff options
author | László Németh <nemeth@numbertext.org> | 2022-03-17 11:14:15 +0100 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2022-03-17 14:19:31 +0100 |
commit | 794fd10af7361d5a64a0f8bfbe5c8b5f308617a5 (patch) | |
tree | ca32aa959cd97c919850e150a151712aa71ed252 /sw | |
parent | b804a64bf78218b79e5e9ca2e99aa95bee60b430 (diff) |
tdf#147347 sw: hide deleted table at deletion in Hide Changes
Last deleted row of a table frame was visible in Hide Changes
mode, if it is deleted in Hide Changes mode.
Fix also missing immediate update of the table layout during
deleting only rows in the table.
Follow-up to commit a74c51025fa4519caaf461492e4ed8e68bd34885
"tdf#146962 sw: hide deleted row at deletion in Hide Changes"
Change-Id: Ic0bf09ac68dd336bd53e84e58f52ebe88ca56238
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131701
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'sw')
-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 4eea50a6529b..6e86ef526f5d 100644 --- a/sw/qa/extras/uiwriter/uiwriter3.cxx +++ b/sw/qa/extras/uiwriter/uiwriter3.cxx @@ -2355,6 +2355,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(); |