diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2022-03-05 22:43:31 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2022-03-06 08:20:19 +0100 |
commit | 52f24a3a1e2ff7f0a599df7bb9caefc8543f7dc4 (patch) | |
tree | a3e01660a598bc8aa2fdc1392ab5d502f19238b2 | |
parent | 648a4b30b33569052847b797c38e52ba2fd2d500 (diff) |
don't destroy and recreate broadcasters on large changes (tdf#131894)
Change-Id: If5377687e7bcfab00af37887d3aaf302fa615690
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131070
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
-rw-r--r-- | sc/source/core/data/documen2.cxx | 1 | ||||
-rw-r--r-- | sc/source/core/data/document.cxx | 9 |
2 files changed, 10 insertions, 0 deletions
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 9c2bbc7c9970..60dd807cdfd0 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -726,6 +726,7 @@ bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos, ScProgress* pProgress ) if (maTabs[nOldPos]) { sc::AutoCalcSwitch aACSwitch(*this, false); + sc::DelayDeletingBroadcasters delayDeletingBroadcasters(*this); SetNoListening( true ); if (nNewPos == SC_TAB_APPEND || nNewPos >= nTabCount) diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index a7fabf46d1df..5973bf913366 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -682,6 +682,7 @@ bool ScDocument::DeleteTab( SCTAB nTab ) { sc::AutoCalcSwitch aACSwitch(*this, false); sc::RefUpdateDeleteTabContext aCxt( *this, nTab, 1); + sc::DelayDeletingBroadcasters delayDeletingBroadcasters(*this); ScRange aRange( 0, 0, nTab, MaxCol(), MaxRow(), nTab ); DelBroadcastAreasInRange( aRange ); @@ -770,6 +771,7 @@ bool ScDocument::DeleteTabs( SCTAB nTab, SCTAB nSheets ) { sc::AutoCalcSwitch aACSwitch(*this, false); sc::RefUpdateDeleteTabContext aCxt( *this, nTab, nSheets); + sc::DelayDeletingBroadcasters delayDeletingBroadcasters(*this); for (SCTAB aTab = 0; aTab < nSheets; ++aTab) { @@ -1256,6 +1258,8 @@ bool ScDocument::InsertRow( SCCOL nStartCol, SCTAB nStartTab, bool bRet = false; bool bOldAutoCalc = GetAutoCalc(); SetAutoCalc( false ); // avoid multiple calculations + bool oldDelayedDeleteBroadcasters = IsDelayedDeletingBroadcasters(); + EnableDelayDeletingBroadcasters( true ); for ( i = nStartTab; i <= nEndTab && bTest && i < static_cast<SCTAB>(maTabs.size()); i++) if (maTabs[i] && (!pTabMark || pTabMark->GetTableSelect(i))) bTest &= maTabs[i]->TestInsertRow(nStartCol, nEndCol, nStartRow, nSize); @@ -1343,6 +1347,7 @@ bool ScDocument::InsertRow( SCCOL nStartCol, SCTAB nStartTab, } bRet = true; } + EnableDelayDeletingBroadcasters( oldDelayedDeleteBroadcasters ); SetAutoCalc( bOldAutoCalc ); if ( bRet && pChartListenerCollection ) pChartListenerCollection->UpdateDirtyCharts(); @@ -1507,6 +1512,8 @@ bool ScDocument::InsertCol( SCROW nStartRow, SCTAB nStartTab, bool bRet = false; bool bOldAutoCalc = GetAutoCalc(); SetAutoCalc( false ); // avoid multiple calculations + bool oldDelayedDeleteBroadcasters = IsDelayedDeletingBroadcasters(); + EnableDelayDeletingBroadcasters( true ); for ( i = nStartTab; i <= nEndTab && bTest && i < static_cast<SCTAB>(maTabs.size()); i++) if (maTabs[i] && (!pTabMark || pTabMark->GetTableSelect(i))) bTest &= maTabs[i]->TestInsertCol( nStartRow, nEndRow, nSize ); @@ -1565,6 +1572,7 @@ bool ScDocument::InsertCol( SCROW nStartRow, SCTAB nStartTab, } bRet = true; } + EnableDelayDeletingBroadcasters( oldDelayedDeleteBroadcasters ); SetAutoCalc( bOldAutoCalc ); if ( bRet && pChartListenerCollection ) pChartListenerCollection->UpdateDirtyCharts(); @@ -2103,6 +2111,7 @@ void ScDocument::CopyToDocument(const ScRange& rRange, sc::AutoCalcSwitch aACSwitch(rDestDoc, false); // avoid multiple calculations ScBulkBroadcast aBulkBroadcast(rDestDoc.GetBASM(), SfxHintId::ScDataChanged); + sc::DelayDeletingBroadcasters delayDeletingBroadcasters(*this); sc::CopyToDocContext aCxt(rDestDoc); aCxt.setStartListening(false); |