summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-10-12 10:18:09 -0400
committerKohei Yoshida <kohei.yoshida@collabora.com>2014-10-12 10:21:00 -0400
commit0b29a16d1dcffd75e49bd7ad3da867b0d0ebfa38 (patch)
tree525a4e4315bd3e4a5a3ac10acac63cc42c2eaa0f
parentbf8876bb7e73587d423ac52fe8920ec198f43e7b (diff)
fdo#83901: ROW() and COLUMN() to be properly recalculated on cell move.
For cases where ROW or COLUMN references another cell that has shifted. Change-Id: Ic4bef8672dab811ceff6886d9af0388306a66485
-rw-r--r--sc/source/core/data/column.cxx6
-rw-r--r--sc/source/core/data/formulacell.cxx2
2 files changed, 7 insertions, 1 deletions
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index d6152dd5412b..521b942cb9af 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -2044,6 +2044,12 @@ class UpdateRefOnNonCopy : std::unary_function<sc::FormulaGroupEntry, void>
if (pCode->IsRecalcModeOnRefMove())
aRes.mbValueChanged = true;
}
+ else if (aRes.mbReferenceModified && pCode->IsRecalcModeOnRefMove())
+ {
+ // The cell itself hasn't shifted. But it may have ROW or COLUMN
+ // referencing another cell that has.
+ aRes.mbValueChanged = true;
+ }
if (aRes.mbNameModified)
recompileTokenArray(*pTop);
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index 8cd95986c73c..33f64e920b5a 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -2788,7 +2788,7 @@ bool ScFormulaCell::UpdateReferenceOnShift(
if (bOnRefMove)
// Cell may reference itself, e.g. ocColumn, ocRow without parameter
- bOnRefMove = (bValChanged || (aPos != aOldPos));
+ bOnRefMove = (bValChanged || (aPos != aOldPos) || bRefModified);
bool bNewListening = false;
bool bInDeleteUndo = false;