sw/source/core/doc/doctxm.cxx | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-)
New commits: commit 123bb36e7eafde85732b57e84d0377586a0a66d8 Author: Michael Stahl <mst...@redhat.com> Date: Tue Mar 21 11:01:20 2017 +0100 tdf#106377 sw: fix Undo of delete of ToXMark from dialog The problem is that SwUndoResetAttr and the SwHistorySetTOXMark by design only insert the SwTextAttr, they don't insert the dummy char of a SwTextAttr that needs one, like the ToXMark does if it marks a point. So just change SwDoc::DeleteTOXMark to create SwUndoDelete instead. Change-Id: Ic1eebac4cf859771a6032bffb2fd8e198aa08084 (cherry picked from commit 63f7da77985674ddf59bb566bdada9c41893e822) Reviewed-on: https://gerrit.libreoffice.org/35501 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> diff --git a/sw/source/core/doc/doctxm.cxx b/sw/source/core/doc/doctxm.cxx index b3462b761a41..46496a78d662 100644 --- a/sw/source/core/doc/doctxm.cxx +++ b/sw/source/core/doc/doctxm.cxx @@ -154,26 +154,38 @@ void SwDoc::DeleteTOXMark( const SwTOXMark* pTOXMark ) SwTextNode& rTextNd = const_cast<SwTextNode&>(pTextTOXMark->GetTextNode()); OSL_ENSURE( rTextNd.GetpSwpHints(), "cannot be deleted" ); - std::unique_ptr<SwRegHistory> aRHst; - if (GetIDocumentUndoRedo().DoesUndo()) + if (pTextTOXMark->HasDummyChar()) { - // save attributes for Undo - SwUndoResetAttr* pUndo = new SwUndoResetAttr( - SwPosition( rTextNd, SwIndex( &rTextNd, pTextTOXMark->GetStart() ) ), - RES_TXTATR_TOXMARK ); - GetIDocumentUndoRedo().AppendUndo( pUndo ); - - aRHst.reset(new SwRegHistory(rTextNd, &pUndo->GetHistory())); - rTextNd.GetpSwpHints()->Register(aRHst.get()); + // tdf#106377 don't use SwUndoResetAttr, it uses NOTXTATRCHR + SwPaM tmp(rTextNd, pTextTOXMark->GetStart(), + rTextNd, pTextTOXMark->GetStart()+1); + assert(rTextNd.GetText()[pTextTOXMark->GetStart()] == CH_TXTATR_INWORD); + getIDocumentContentOperations().DeleteRange(tmp); } + else + { + std::unique_ptr<SwRegHistory> aRHst; + if (GetIDocumentUndoRedo().DoesUndo()) + { + // save attributes for Undo + SwUndoResetAttr* pUndo = new SwUndoResetAttr( + SwPosition( rTextNd, SwIndex( &rTextNd, pTextTOXMark->GetStart() ) ), + RES_TXTATR_TOXMARK ); + GetIDocumentUndoRedo().AppendUndo( pUndo ); + + aRHst.reset(new SwRegHistory(rTextNd, &pUndo->GetHistory())); + rTextNd.GetpSwpHints()->Register(aRHst.get()); + } - rTextNd.DeleteAttribute( const_cast<SwTextTOXMark*>(pTextTOXMark) ); + rTextNd.DeleteAttribute( const_cast<SwTextTOXMark*>(pTextTOXMark) ); - if (GetIDocumentUndoRedo().DoesUndo()) - { - if( rTextNd.GetpSwpHints() ) - rTextNd.GetpSwpHints()->DeRegister(); + if (GetIDocumentUndoRedo().DoesUndo()) + { + if( rTextNd.GetpSwpHints() ) + rTextNd.GetpSwpHints()->DeRegister(); + } } + getIDocumentState().SetModified(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits