summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-10-27 08:52:38 -0700
committerKohei Yoshida <kohei.yoshida@collabora.com>2014-10-27 08:54:42 -0700
commit1eb82c78a223d9a0b2bb5c3f5c129c1ee8bdf303 (patch)
tree7fda4a368448722f54e7fcff2a31a59c7ea30b78
parentf70db32aa2df79cca42c44f05baf4baac6e04bf5 (diff)
fdo#85215: Ensure that formula broadcasting works after sort.
When the reference update on sort is turned off. Change-Id: I547dd1525a638dd447fe331e22583af4a7947308
-rw-r--r--sc/source/core/data/table3.cxx15
1 files changed, 15 insertions, 0 deletions
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index 3e8250ab219a..04bbbce4d9f5 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -801,6 +801,15 @@ void ScTable::SortReorderByRow(
ScSortInfoArray::RowsType* pRows = pArray->GetDataRows();
assert(pRows); // In sort-by-row mode we must have data rows already populated.
+ if (!pArray->IsUpdateRefs())
+ {
+ // When the update ref mode is disabled, we need to detach all formula
+ // cells in the sorted range before reordering, and re-start them
+ // afterward.
+ sc::EndListeningContext aCxt(*pDocument);
+ DetachFormulaCells(aCxt, nCol1, nRow1, nCol2, nRow2);
+ }
+
// Split formula groups at the sort range boundaries (if applicable).
std::vector<SCROW> aRowBounds;
aRowBounds.reserve(2);
@@ -1081,6 +1090,12 @@ void ScTable::SortReorderByRow(
// Re-group columns in the sorted range too.
for (SCCOL i = nCol1; i <= nCol2; ++i)
aCol[i].RegroupFormulaCells();
+
+ if (!pArray->IsUpdateRefs())
+ {
+ sc::StartListeningContext aCxt(*pDocument);
+ AttachFormulaCells(aCxt, nCol1, nRow1, nCol2, nRow2);
+ }
}
short ScTable::CompareCell(