diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2017-04-05 21:09:59 -0400 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2017-04-19 16:56:53 +0200 |
commit | fea2599a96a8e532867e08eb38eae3b7aeb19d8e (patch) | |
tree | 6294bf0ae599149f781282abebda97309c6c160a | |
parent | 9bc76a7e0903c9892da719469470508d6b142689 (diff) |
tdf#92650: handle overwritten references correctly in undo.
(cherry picked from commit de39b6ba3a9edd20a476937ef0c78920df2f5c6d)
Conflicts:
sc/source/ui/docshell/docfunc.cxx
Change-Id: Idc3fbd78f8163c97a9cd80a3ff474b6da0349353
Reviewed-on: https://gerrit.libreoffice.org/36539
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Eike Rathke <erack@redhat.com>
(cherry picked from commit 856a2d868fedd010d58d6082d3cb4753a019408a)
-rw-r--r-- | sc/source/core/tool/token.cxx | 10 | ||||
-rw-r--r-- | sc/source/ui/docshell/docfunc.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/undo/undoblk.cxx | 2 |
3 files changed, 12 insertions, 2 deletions
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 23f986981784..bf25d135f728 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -3166,6 +3166,11 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove( aAbs = aErrorPos; aRes.mbReferenceModified = true; } + else if (rCxt.maRange.In(aAbs)) + { + // Referenced cell has been overwritten. + aRes.mbValueChanged = true; + } rRef.SetAddress(aAbs, rNewPos); rRef.SetFlag3D(aAbs.Tab() != rNewPos.Tab() || !rRef.IsTabRel()); @@ -3182,6 +3187,11 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove( aAbs = aErrorRange; aRes.mbReferenceModified = true; } + else if (rCxt.maRange.In(aAbs)) + { + // Referenced range has been entirely overwritten. + aRes.mbValueChanged = true; + } rRef.SetRange(aAbs, rNewPos); // Absolute sheet reference => set 3D flag. diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index 2ecad6937505..f6ce56e90219 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -2840,7 +2840,7 @@ bool ScDocFunc::MoveBlock( const ScRange& rSource, const ScAddress& rDestPos, ScDrawLayer::MoveCells() which may move away inserted objects to wrong positions (e.g. if source and destination range overlaps).*/ rDoc.CopyFromClip( aPasteDest, aDestMark, InsertDeleteFlags::ALL & ~(InsertDeleteFlags::OBJECTS), - nullptr, pClipDoc, true, false, bIncludeFiltered ); + pUndoDoc, pClipDoc, true, false, bIncludeFiltered ); // skipped rows and merged cells don't mix if ( !bIncludeFiltered && pClipDoc->HasClipFilteredRows() ) diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx index 2c19695b6b86..6d0466dd1dd3 100644 --- a/sc/source/ui/undo/undoblk.cxx +++ b/sc/source/ui/undo/undoblk.cxx @@ -1102,7 +1102,7 @@ bool ScUndoPaste::CanRepeat(SfxRepeatTarget& rTarget) const ScUndoDragDrop::ScUndoDragDrop( ScDocShell* pNewDocShell, const ScRange& rRange, ScAddress aNewDestPos, bool bNewCut, ScDocument* pUndoDocument, bool bScenario ) : - ScMoveUndo( pNewDocShell, pUndoDocument, nullptr, SC_UNDO_REFFIRST ), + ScMoveUndo( pNewDocShell, pUndoDocument, nullptr, SC_UNDO_REFLAST ), mnPaintExtFlags( 0 ), aSrcRange( rRange ), bCut( bNewCut ), |