From 241d8e47e708e1912e036f1026f1c43ee1bf84a1 Mon Sep 17 00:00:00 2001 From: Luboš Luňák Date: Wed, 17 Jun 2020 19:05:59 +0200 Subject: delay and batch calls to StartListeningFormulaCells() (tdf#132165) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- sc/inc/scopetools.hxx | 1 + sc/source/core/data/table4.cxx | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/sc/inc/scopetools.hxx b/sc/inc/scopetools.hxx index dd060615db67..eb2941f15777 100644 --- a/sc/inc/scopetools.hxx +++ b/sc/inc/scopetools.hxx @@ -82,6 +82,7 @@ class DelayStartListeningFormulaCells public: DelayStartListeningFormulaCells(ScColumn& column, bool delay); DelayStartListeningFormulaCells(ScColumn& column); + DelayStartListeningFormulaCells(const DelayStartListeningFormulaCells&) = delete; ~DelayStartListeningFormulaCells(); void set(); }; 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 #include #include +#include #include #include +#include #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; -- cgit