summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2016-10-07 19:28:18 +0200
committerEike Rathke <erack@redhat.com>2016-10-07 19:49:25 +0200
commit180fe3e991432a5ab1ef573686ff9b35c732756b (patch)
tree297f0035bddb63cdc887aeea91ff6f2cfc39ab2b
parent1b786fb2db9b555fd9882487f1f0375bd93f6e32 (diff)
tdf#101562 inserting within an entire col/row reference needs to flag change
This is the insert part (e.g. Undo) of the bug scenario. Change-Id: I87060bd9f0ad6d58a11308e58e7ce56875327c52
-rw-r--r--sc/source/core/tool/token.cxx21
1 files changed, 17 insertions, 4 deletions
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 156b099f4500..407a1006d5d9 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -3019,10 +3019,23 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateCon
if (rCxt.maRange.In(aAbs))
{
- ScRange aErrorRange( ScAddress::UNINITIALIZED );
- if (!aAbs.MoveSticky(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta, aErrorRange))
- aAbs = aErrorRange;
- aRes.mbReferenceModified = true;
+ // We shift either by column or by row, not both,
+ // so moving the reference has only to be done in
+ // the non-sticky case.
+ if ((rCxt.mnRowDelta && rRef.IsEntireCol()) || (rCxt.mnColDelta && rRef.IsEntireRow()))
+ {
+ // In entire col/row, values are shifted within
+ // the reference, which affects all positional
+ // results like in MATCH or matrix positions.
+ aRes.mbValueChanged = true;
+ }
+ else
+ {
+ ScRange aErrorRange( ScAddress::UNINITIALIZED );
+ if (!aAbs.MoveSticky(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta, aErrorRange))
+ aAbs = aErrorRange;
+ aRes.mbReferenceModified = true;
+ }
}
else if (rCxt.maRange.Intersects(aAbs))
{