sc/source/core/tool/token.cxx | 10 ++++++++++ sc/source/ui/docshell/docfunc.cxx | 6 ++++-- sc/source/ui/undo/undoblk.cxx | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-)
New commits: commit 6d588e65021ad3d00a91a2732b2a6cf4c59b3534 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Wed Apr 5 21:09:59 2017 -0400 tdf#92650: handle overwritten references correctly in undo. Change-Id: Idc3fbd78f8163c97a9cd80a3ff474b6da0349353 Reviewed-on: https://gerrit.libreoffice.org/36496 Reviewed-by: Kohei Yoshida <libreoff...@kohei.us> Tested-by: Kohei Yoshida <libreoff...@kohei.us> diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 26075a4278f5..75ef12c08299 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -3167,6 +3167,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()); @@ -3183,6 +3188,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 1619865cf7e9..76ac2a1aa902 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -2839,8 +2839,10 @@ bool ScDocFunc::MoveBlock( const ScRange& rSource, const ScAddress& rDestPos, function ScDocument::UpdateReference() is called which calls 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.get(), true, false, bIncludeFiltered ); + + rDoc.CopyFromClip( + aPasteDest, aDestMark, InsertDeleteFlags::ALL & ~(InsertDeleteFlags::OBJECTS), + pUndoDoc, pClipDoc.get(), 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 dccc583e1317..1141e75655b7 100644 --- a/sc/source/ui/undo/undoblk.cxx +++ b/sc/source/ui/undo/undoblk.cxx @@ -1101,7 +1101,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 ), _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits