sw/source/core/undo/undel.cxx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
New commits: commit 5d836621326c68decaae09f1911d2d036a251b43 Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Thu Jun 18 14:19:12 2020 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Thu Jun 18 18:09:58 2020 +0200 tdf#134021 sw_redlinehide: fix crash if document contains only table This sets the m_bTableDelLastNd flag in SwUndoDelete, so a SwTextNode is created so that there's something in the document, and there are 2 problems with Undo: 1. ~SwIndexReg assert because there's a shell cursor on the text node; could fix this with some PaMCorrAbs() but let's just call DelFullPara() which takes care of that. (this likely isn't possible in the !m_bTableDelLastNd case) 2. no frames are created in MakeFrames() because there's no node in the document with layout frames, so delete it at the end. (regression from 723728cd358693b8f4bc9d913541aa4479f2bd48) Change-Id: I6d8535ae1a2e607d665660f149b344e817bc8ab0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96604 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@cib.de> diff --git a/sw/source/core/undo/undel.cxx b/sw/source/core/undo/undel.cxx index 739597cf6fce..d225d1eb2868 100644 --- a/sw/source/core/undo/undel.cxx +++ b/sw/source/core/undo/undel.cxx @@ -856,6 +856,7 @@ void SwUndoDelete::UndoImpl(::sw::UndoRedoContext & rContext) SwPosition aPos( aIdx ); if( !m_bDelFullPara ) { + assert(!m_bTableDelLastNd || pInsNd->IsTextNode()); if( pInsNd->IsTableNode() ) { pInsNd = rDoc.GetNodes().MakeTextNode( aIdx, @@ -1042,8 +1043,11 @@ void SwUndoDelete::UndoImpl(::sw::UndoRedoContext & rContext) } } // delete the temporarily added Node - if( pInsNd ) + if (pInsNd && !m_bTableDelLastNd) + { + assert(&aIdx.GetNode() == pInsNd); rDoc.GetNodes().Delete( aIdx ); + } if( m_pRedlSaveData ) SetSaveData(rDoc, *m_pRedlSaveData); @@ -1135,6 +1139,15 @@ void SwUndoDelete::UndoImpl(::sw::UndoRedoContext & rContext) lcl_MakeAutoFrames(*rDoc.GetSpzFrameFormats(), pMovedNode->GetIndex()); } + // tdf#134021 only after MakeFrames(), because it may be the only node + // that has layout frames + if (pInsNd && m_bTableDelLastNd) + { + assert(&aIdx.GetNode() == pInsNd); + SwPaM tmp(aIdx, aIdx); + rDoc.getIDocumentContentOperations().DelFullPara(tmp); + } + AddUndoRedoPaM(rContext, true); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits