summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2016-09-21 12:39:41 +0200
committerEike Rathke <erack@redhat.com>2016-09-22 10:04:55 +0200
commit5306fabfea74c01b49f96920564c7eefa91e87aa (patch)
treed2e8b5bb802feda65f6dffea2d5ad17da02b1b89
parent14863b9a065ddc3332dd1da14c28708919b0101d (diff)
tdf#87101 Revert "fdo#83067 also volatile cells need to listen to all refe"...
This reverts commit 0792aef9010007d5738723d8930990028bef2f9e. It created a bottleneck with massive use of OFFSET() functions mixed with other references, see tdf#87101 bugdoc. Will have to come up with a different approach to solve the "broadcast cell move" problem. Additionally, the unit test for tdf#83067 and the original problem still work with the reverted change, so we seem to generally have fixed something else in the meantime.. Conflicts: sc/source/core/data/formulacell.cxx Change-Id: Ida2e26398f99ff5878d43ffb46035bc4441dfff6
-rw-r--r--sc/source/core/data/formulacell.cxx8
1 files changed, 7 insertions, 1 deletions
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index b32d4ed45e36..5968110c5f2b 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -2144,7 +2144,7 @@ void ScFormulaCell::InterpretTail( ScInterpretTailParameter eTailParam )
if (pCode->IsRecalcModeAlways())
{
// The formula was previously volatile, but no more.
- pDocument->EndListeningArea(BCA_LISTEN_ALWAYS, false, this);
+ EndListeningTo(pDocument);
pCode->SetExclusiveRecalcModeNormal();
}
else
@@ -4280,6 +4280,8 @@ void ScFormulaCell::StartListeningTo( ScDocument* pDoc )
if( pArr->IsRecalcModeAlways() )
{
pDoc->StartListeningArea(BCA_LISTEN_ALWAYS, false, this);
+ SetNeedsListening( false);
+ return;
}
pArr->Reset();
@@ -4321,6 +4323,8 @@ void ScFormulaCell::StartListeningTo( sc::StartListeningContext& rCxt )
if( pArr->IsRecalcModeAlways() )
{
rDoc.StartListeningArea(BCA_LISTEN_ALWAYS, false, this);
+ SetNeedsListening( false);
+ return;
}
pArr->Reset();
@@ -4392,6 +4396,7 @@ void ScFormulaCell::EndListeningTo( ScDocument* pDoc, ScTokenArray* pArr,
if ( GetCode()->IsRecalcModeAlways() )
{
pDoc->EndListeningArea(BCA_LISTEN_ALWAYS, false, this);
+ return;
}
if (!pArr)
@@ -4443,6 +4448,7 @@ void ScFormulaCell::EndListeningTo( sc::EndListeningContext& rCxt )
if (pArr->IsRecalcModeAlways())
{
rDoc.EndListeningArea(BCA_LISTEN_ALWAYS, false, this);
+ return;
}
pArr->Reset();