sw/qa/extras/uiwriter/uiwriter5.cxx | 33 ++++++++++++++++++++++++++ sw/source/core/doc/DocumentRedlineManager.cxx | 3 ++ 2 files changed, 36 insertions(+)
New commits: commit 9486ead7bbd5bd2460f5c75540dfeb731838e655 Author: László Németh <nem...@numbertext.org> AuthorDate: Fri Jun 9 12:22:17 2023 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Fri Jun 9 15:45:56 2023 +0200 tdf#155747 sw tracked table column: fix crash at table selection Selecting tracked columns and accepting their deletion resulted crashing because of the outdated table cursor in IsCursorInTable() call of UpdateTableStyleFormatting(). Remove table cursor before calling DeleteCol(). Regression from commit d1004cdd6a445ae73673b0ca360ae034b0ec09f2 "tdf#150673 sw offapi: add change tracking of table column deletion". Change-Id: I47f4db11bd7ce4ad851c0658eec3e12ce4fdf4a7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152792 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> diff --git a/sw/qa/extras/uiwriter/uiwriter5.cxx b/sw/qa/extras/uiwriter/uiwriter5.cxx index dc2506881c19..88868f8086c2 100644 --- a/sw/qa/extras/uiwriter/uiwriter5.cxx +++ b/sw/qa/extras/uiwriter/uiwriter5.cxx @@ -2556,6 +2556,39 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, testRedlineTableColumnDeletion) assertXPath(pXmlDoc, "//page[1]//body/tab/row/cell", 1); } +CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, testTdf155747) +{ + // load a table, and delete the first column with enabled change tracking: + // now the column is not deleted silently, but keeps the deleted cell content, + // and only accepting it will result the deletion of the table column. + createSwDoc("tdf118311.fodt"); + SwDoc* pDoc = getSwDoc(); + + // turn on red-lining and show changes + pDoc->getIDocumentRedlineAccess().SetRedlineFlags(RedlineFlags::On | RedlineFlags::ShowDelete + | RedlineFlags::ShowInsert); + CPPUNIT_ASSERT_MESSAGE("redlining should be on", + pDoc->getIDocumentRedlineAccess().IsRedlineOn()); + CPPUNIT_ASSERT_MESSAGE( + "redlines should be visible", + IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags())); + + // delete table column with enabled change tracking + // (HasTextChangesOnly property of the cell will be false) + dispatchCommand(mxComponent, ".uno:DeleteColumns", {}); + + // select table + dispatchCommand(mxComponent, ".uno:SelectTable", {}); + + // Without the fix in place, this test would have crashed here + dispatchCommand(mxComponent, ".uno:AcceptTrackedChange", {}); + + // check removed column + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//page[1]//body/tab"); + assertXPath(pXmlDoc, "//page[1]//body/tab/row/cell", 1); +} + CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, testTdf150673_RedlineTableColumnDeletionWithExport) { // load a table, and delete the first column with enabled change tracking: diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx index ac0bfe547e90..d9148ce723f3 100644 --- a/sw/source/core/doc/DocumentRedlineManager.cxx +++ b/sw/source/core/doc/DocumentRedlineManager.cxx @@ -22,6 +22,7 @@ #include <txtfrm.hxx> #include <doc.hxx> #include <docsh.hxx> +#include <wrtsh.hxx> #include <fmtfld.hxx> #include <frmtool.hxx> #include <IDocumentUndoRedo.hxx> @@ -467,6 +468,8 @@ namespace SwCursor aCursor( *pPos, nullptr ); if ( pBox->IsEmpty() ) { + // tdf#155747 remove table cursor + pPos->GetDoc().GetDocShell()->GetWrtShell()->EnterStdMode(); // TODO check the other cells of the column // before removing the column pPos->GetDoc().DeleteCol( aCursor );