sw/inc/swtable.hxx | 3 +++ sw/qa/extras/uiwriter/data/TC-table-rowadd.docx |binary sw/source/core/doc/DocumentRedlineManager.cxx | 22 +++++----------------- sw/source/core/table/swtable.cxx | 10 ++++++++++ sw/source/core/unocore/unocrsrhelper.cxx | 16 ++++++++++++++-- 5 files changed, 32 insertions(+), 19 deletions(-)
New commits: commit a483a44ca00f43a64ae51d62b8fbb4129a413f6d Author: László Németh <nem...@numbertext.org> AuthorDate: Tue Jul 13 13:35:15 2021 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Tue Jul 13 16:48:46 2021 +0200 tdf#143215 DOCX import: fix tracked empty row insertion/deletion Rejecting tracked empty row insertion, or accepting tracked empty row deletion didn't remove the line from the table. Regression from commit c4cf85766453982f1aa94a7f2cb22af19ed100be "sw: fix crash due to redlines on tables on ooo121112-2.docx". Note: as a workaround for the empty rows, i.e. rows without text content, add a redline with invisible text ZWJ in the first cell of the empty row. Follow-up to commit 03b29d4ddb99337c4d54b241020c95e8b2a66991 "tdf#143278 DOCX: support tracked table (row) insertion", commit 05366b8e6683363688de8708a3d88cf144c7a2bf "tdf#60382 sw offapi: add change tracking of table/row deletion" and commit 896c2199d9f0a28bd405dd2d1068f5e2973cdf06 "tdf#79069 DOCX: support tracked table (row) deletion". Change-Id: I8616a9d6f4a8d21e88c55d935f14a8c6a73c28ec Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118839 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> diff --git a/sw/inc/swtable.hxx b/sw/inc/swtable.hxx index 6c98d5bed360..ce1982312f75 100644 --- a/sw/inc/swtable.hxx +++ b/sw/inc/swtable.hxx @@ -386,6 +386,9 @@ public: SwTwips GetTableLineHeight( bool& bLayoutAvailable ) const; bool hasSoftPageBreak() const; + + // it doesn't contain box content + bool IsEmpty() const; }; /// SwTableBox is one table cell in the document model. diff --git a/sw/qa/extras/uiwriter/data/TC-table-rowadd.docx b/sw/qa/extras/uiwriter/data/TC-table-rowadd.docx new file mode 100644 index 000000000000..b654b959054e Binary files /dev/null and b/sw/qa/extras/uiwriter/data/TC-table-rowadd.docx differ diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx index 0196ea4d5e30..1a3e0da61041 100644 --- a/sw/source/core/doc/DocumentRedlineManager.cxx +++ b/sw/source/core/doc/DocumentRedlineManager.cxx @@ -443,24 +443,12 @@ namespace const SwTableLine* pLine = pBox->GetUpper(); const SvxPrintItem *pHasTextChangesOnlyProp = pLine->GetFrameFormat()->GetAttrSet().GetItem<SvxPrintItem>(RES_PRINT); - // table row property "HasTextChangesOnly" is set and its value is false - if ( pHasTextChangesOnlyProp && !pHasTextChangesOnlyProp->GetValue() ) + // empty table row with property "HasTextChangesOnly" = false + if ( pHasTextChangesOnlyProp && !pHasTextChangesOnlyProp->GetValue() && + pLine->IsEmpty() ) { - bool bEmptyLine = true; - const SwTableBoxes & rBoxes = pLine->GetTabBoxes(); - for (size_t nBox = 0; nBox < rBoxes.size(); ++nBox) - { - if ( !rBoxes[nBox]->IsEmpty() ) - { - bEmptyLine = false; - break; - } - } - if ( bEmptyLine ) - { - SwCursor aCursor( *pPos, nullptr ); - pPos->GetDoc().DeleteRow( aCursor ); - } + SwCursor aCursor( *pPos, nullptr ); + pPos->GetDoc().DeleteRow( aCursor ); } } } diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx index 1da79f960545..c750aa3d75f9 100644 --- a/sw/source/core/table/swtable.cxx +++ b/sw/source/core/table/swtable.cxx @@ -1545,6 +1545,16 @@ SwTwips SwTableLine::GetTableLineHeight( bool& bLayoutAvailable ) const return nRet; } +bool SwTableLine::IsEmpty() const +{ + for (size_t i = 0; i < m_aBoxes.size(); ++i) + { + if ( !m_aBoxes[i]->IsEmpty() ) + return false; + } + return true; +} + SwTableBox::SwTableBox( SwTableBoxFormat* pFormat, sal_uInt16 nLines, SwTableLine *pUp ) : SwClient(nullptr) , m_aLines() diff --git a/sw/source/core/unocore/unocrsrhelper.cxx b/sw/source/core/unocore/unocrsrhelper.cxx index aaa223d02894..a04341135117 100644 --- a/sw/source/core/unocore/unocrsrhelper.cxx +++ b/sw/source/core/unocore/unocrsrhelper.cxx @@ -1411,8 +1411,20 @@ void makeTableRowRedline( SwTableLine& rTableLine, if ( !pHasTextChangesOnlyProp || pHasTextChangesOnlyProp->GetValue() ) { SvxPrintItem aSetTracking(RES_PRINT, false); - SwPosition aPos( *rTableLine.GetTabBoxes()[0]->GetSttNd() ); - SwCursor aCursor( aPos, nullptr ); + SwNodeIndex aInsPos( *(rTableLine.GetTabBoxes()[0]->GetSttNd()), 1 ); + // as a workaround for the rows without text content, + // add a redline with invisible text ZWJ + if ( rTableLine.IsEmpty() ) + { + SwPaM aPaM(aInsPos); + pDoc->getIDocumentContentOperations().InsertString( aPaM, u"" ); + aPaM.SetMark(); + aPaM.GetMark()->nContent.Assign(aPaM.GetContentNode(), 0); + makeRedline(aPaM, RedlineType::TableRowInsert == eType + ? u"Insert" + : u"Delete", rRedlineProperties); + } + SwCursor aCursor( SwPosition(aInsPos), nullptr ); pDoc->SetRowNotTracked( aCursor, aSetTracking ); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits