[Libreoffice-commits] core.git: sc/source

Luboš Luňák (via logerrit) logerrit at kemper.freedesktop.org
Fri May 17 12:47:25 UTC 2019


 sc/source/core/data/attarray.cxx |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

New commits:
commit 390bd27d92971d9f523b20510554334e30ae9b9d
Author:     Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Thu May 16 15:59:58 2019 +0200
Commit:     Luboš Luňák <l.lunak at collabora.com>
CommitDate: Fri May 17 14:46:26 2019 +0200

    cache mdds position in ScAttrArray::RemoveCellCharAttribs() (tdf#108298)
    
    Once more, mdds normally starts a container search from the beginning,
    so this is quadratic. Doesn't happen with the bugdoc after Ctrl+A,
    ScAttrArray::SetPatternAreaImpl() special-cases that, but with explicitly
    giving a range this triggers.
    
    Change-Id: Ic1177c1a115ffde23d7e11a90156ae05e02d067d
    Reviewed-on: https://gerrit.libreoffice.org/72416
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lunak at collabora.com>

diff --git a/sc/source/core/data/attarray.cxx b/sc/source/core/data/attarray.cxx
index 3805ad4fa662..9431c468bfe6 100644
--- a/sc/source/core/data/attarray.cxx
+++ b/sc/source/core/data/attarray.cxx
@@ -42,6 +42,7 @@
 #include <editdataarray.hxx>
 #include <cellvalue.hxx>
 #include <editutil.hxx>
+#include <mtvelements.hxx>
 #include <memory>
 
 using ::editeng::SvxBorderLine;
@@ -397,10 +398,13 @@ void ScAttrArray::RemoveCellCharAttribs( SCROW nStartRow, SCROW nEndRow,
                                        const ScPatternAttr* pPattern, ScEditDataArray* pDataArray )
 {
     assert( nCol != -1 );
+    // cache mdds position, this doesn't modify the mdds container, just EditTextObject's
+    sc::ColumnBlockPosition blockPos;
+    pDocument->InitColumnBlockPosition( blockPos, nTab, nCol );
     for (SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
     {
         ScAddress aPos(nCol, nRow, nTab);
-        ScRefCellValue aCell(*pDocument, aPos);
+        ScRefCellValue aCell(*pDocument, aPos, blockPos);
         if (aCell.meType != CELLTYPE_EDIT || !aCell.mpEditText)
             continue;
 


More information about the Libreoffice-commits mailing list