summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2017-04-25 21:38:28 +0200
committerBjörn Michaelsen <bjoern.michaelsen@libreoffice.org>2017-05-03 16:01:15 +0200
commit3b6d36eb02f894b348a1132d6e49cb5b6e2a6a2b (patch)
tree701e7cdcc26faddbf818f4163a9a933bb9988d1c
parent87a1f2b064303df317a618e9a21bcf256173cc81 (diff)
ofz#1262 sw: DeleteAndJoin could delete proposed new redline
... because that calls CompressRedlines, which may combine the new redline with a previous one. In that case, the part of the new redline that follows the currently handled overlap cannot be checked for overlaps with subsequent existing redlines. So prevent this with a new flag m_isForbidCompressRedlines and instead call CompressRedlines() at the end of AppendRedline(). Change-Id: I7567962c31366ded9a433a13232d3db985745e43 Reviewed-on: https://gerrit.libreoffice.org/37041 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> (cherry picked from commit 5d1c6f1c9f392679cec6f1f4ab9673ab31e96585) Reviewed-on: https://gerrit.libreoffice.org/37195 Reviewed-by: Björn Michaelsen <bjoern.michaelsen@libreoffice.org> Tested-by: Björn Michaelsen <bjoern.michaelsen@libreoffice.org>
-rw-r--r--sw/source/core/doc/DocumentRedlineManager.cxx21
-rw-r--r--sw/source/core/inc/DocumentRedlineManager.hxx1
2 files changed, 22 insertions, 0 deletions
diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx
index 6db6b797dc35..f2d51192759d 100644
--- a/sw/source/core/doc/DocumentRedlineManager.cxx
+++ b/sw/source/core/doc/DocumentRedlineManager.cxx
@@ -30,6 +30,7 @@
#include <swmodule.hxx>
#include <editsh.hxx>
#include <vcl/layout.hxx>
+#include <comphelper/flagguard.hxx>
using namespace com::sun::star;
@@ -1226,10 +1227,15 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
// also dealt with when moving the indices.
if( bCallDelete )
{
+ ::comphelper::FlagGuard g(m_isForbidCompressRedlines);
mpRedlineTable->Insert( pNewRedl );
m_rDoc.getIDocumentContentOperations().DeleteAndJoin( *pRedl );
if( !mpRedlineTable->Remove( pNewRedl ) )
+ {
+ assert(false); // can't happen
pNewRedl = nullptr;
+ }
+ bCompress = true; // delayed compress
}
delete pRedl;
}
@@ -1253,10 +1259,15 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
{
// We insert temporarily so that pNew is
// also dealt with when moving the indices.
+ ::comphelper::FlagGuard g(m_isForbidCompressRedlines);
mpRedlineTable->Insert( pNewRedl );
m_rDoc.getIDocumentContentOperations().DeleteAndJoin( aPam );
if( !mpRedlineTable->Remove( pNewRedl ) )
+ {
+ assert(false); // can't happen
pNewRedl = nullptr;
+ }
+ bCompress = true; // delayed compress
n = 0; // re-initialize
}
bDec = true;
@@ -1279,10 +1290,15 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
{
// We insert temporarily so that pNew is
// also dealt with when moving the indices.
+ ::comphelper::FlagGuard g(m_isForbidCompressRedlines);
mpRedlineTable->Insert( pNewRedl );
m_rDoc.getIDocumentContentOperations().DeleteAndJoin( aPam );
if( !mpRedlineTable->Remove( pNewRedl ) )
+ {
+ assert(false); // can't happen
pNewRedl = nullptr;
+ }
+ bCompress = true; // delayed compress
n = 0; // re-initialize
bDec = true;
}
@@ -1777,6 +1793,11 @@ bool DocumentRedlineManager::AppendTableCellRedline( SwTableCellRedline* pNewRed
void DocumentRedlineManager::CompressRedlines()
{
+ if (m_isForbidCompressRedlines)
+ {
+ return;
+ }
+
CHECK_REDLINE( *this )
void (SwRangeRedline::*pFnc)(sal_uInt16, size_t) = nullptr;
diff --git a/sw/source/core/inc/DocumentRedlineManager.hxx b/sw/source/core/inc/DocumentRedlineManager.hxx
index bdcd45c5fc67..999cbd7137ce 100644
--- a/sw/source/core/inc/DocumentRedlineManager.hxx
+++ b/sw/source/core/inc/DocumentRedlineManager.hxx
@@ -137,6 +137,7 @@ private:
sal_uInt16 mnAutoFormatRedlnCommentNo; /**< SeqNo for conjoining of AutoFormat-Redlines.
by the UI. Managed by SwAutoFormat! */
css::uno::Sequence <sal_Int8 > maRedlinePasswd;
+ bool m_isForbidCompressRedlines = false;
};
}