diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2020-06-17 19:05:59 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2020-06-18 11:10:06 +0200 |
commit | 241d8e47e708e1912e036f1026f1c43ee1bf84a1 (patch) | |
tree | d91b707f6839531c68ad5fea3047d89031ba5409 /sc/source | |
parent | c8bed6445b244a5d9021dbd9a2ff19d80c03917b (diff) |
delay and batch calls to StartListeningFormulaCells() (tdf#132165)
This is pretty much the same as tdf#133302.
Change-Id: I5325b90601f503e572faefc455a38e0f5b055bbf
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96560
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'sc/source')
-rw-r--r-- | sc/source/core/data/table4.cxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx index b18752ca3a8a..c8f533c65708 100644 --- a/sc/source/core/data/table4.cxx +++ b/sc/source/core/data/table4.cxx @@ -45,9 +45,11 @@ #include <conditio.hxx> #include <editutil.hxx> #include <listenercontext.hxx> +#include <scopetools.hxx> #include <math.h> #include <memory> +#include <list> #define D_MAX_LONG_ double(0x7fffffff) @@ -592,6 +594,25 @@ void ScTable::FillAuto( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, if (pProgress) nProgress = pProgress->GetState(); + // Avoid possible repeated calls to StartListeningFormulaCells() (tdf#132165). + std::list< sc::DelayStartListeningFormulaCells > delayStartListening; + SCCOL delayStartColumn, delayEndColumn; + if(bVertical) + { + delayStartColumn = std::min( nOStart, nOEnd ); + delayEndColumn = std::max( nOStart, nOEnd ); + } + else + { + delayStartColumn = std::min( nIStart, nIEnd ); + delayEndColumn = std::max( nIStart, nIEnd ); + } + for( SCROW col = delayStartColumn; col <= delayEndColumn; ++col ) + { + if( ScColumn* column = FetchColumn( col )) + delayStartListening.emplace_back( *column, true ); + } + // execute sal_uLong nActFormCnt = 0; |