summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2014-06-09 22:43:01 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2014-06-11 12:42:19 +0000
commit90132a32f8bc2e27c097d79c0cc1ddd7cae35da6 (patch)
tree84c1e7c36325a4dd83a81b27798f1f39524450e0
parent49940766a52f5eccb1d5f4392304a9437bad0c49 (diff)
fdo#76324: Make pasting a lot of cell notes faster by disabling broadcasting.
Change-Id: If76e80af8dcecf70e4ea624a7f538023c48a5108 (cherry picked from commit e7a3aacff7d28577dee371ed5b27317522db7b3b) Reviewed-on: https://gerrit.libreoffice.org/9710 Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com> Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r--sc/source/core/data/column2.cxx12
1 files changed, 12 insertions, 0 deletions
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 3fdbc52c88f3..18aee248a752 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -22,6 +22,7 @@
#include "formulacell.hxx"
#include "document.hxx"
#include "docpool.hxx"
+#include "drwlayer.hxx"
#include "attarray.hxx"
#include "patattr.hxx"
#include "cellform.hxx"
@@ -1834,8 +1835,19 @@ public:
void ScColumn::CopyCellNotesToDocument(
SCROW nRow1, SCROW nRow2, ScColumn& rDestCol, bool bCloneCaption, SCROW nRowOffsetDest ) const
{
+ ScDrawLayer *pDrawLayer = rDestCol.GetDoc().GetDrawLayer();
+ bool bWasLocked;
+ if (pDrawLayer)
+ {
+ // Avoid O(n^2) by temporary locking SdrModel which disables broadcasting.
+ // Each cell note adds undo listener, and all of them would be woken up in ScPostIt::CreateCaption.
+ bWasLocked = pDrawLayer->isLocked();
+ pDrawLayer->setLock(true);
+ }
CopyCellNotesHandler aFunc(*this, rDestCol, nRowOffsetDest, bCloneCaption);
sc::ParseNote(maCellNotes.begin(), maCellNotes, nRow1, nRow2, aFunc);
+ if (pDrawLayer)
+ pDrawLayer->setLock(bWasLocked);
}
void ScColumn::DuplicateNotes(SCROW nStartRow, size_t nDataSize, ScColumn& rDestCol, sc::ColumnBlockPosition& maDestBlockPos,