sc/source/ui/unoobj/cellsuno.cxx |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

New commits:
commit 5ee413d78cfc1cbfbe7c05f0c21c40ffb32f572a
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Tue Dec 28 19:55:29 2021 +0100
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Thu Jan 13 09:48:37 2022 +0100

    tdf#146454 - Check for multiline string in setDataArray
    
    Check for a multiline string in the setDataArray function. If that is
    the case, set a string or edit cell. Otherwise, just set a plain string in 
order to prevent performance issues due to the adjustments of the row height.
    
    Regression from b9e2c5d2a36fbd189c20448cadf4212edf02914d
    
    Change-Id: I9216b198b878fda5da29596d25504db853acd756
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127660
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>
    (cherry picked from commit 2d11710df6d81c03007d136667a443e09cc70eed)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128332
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    (cherry picked from commit b1e2d386afc3174d79a11fcfe365bf3a51f0caef)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128333

diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx
index 29d3b29086da..9d280b35213e 100644
--- a/sc/source/ui/unoobj/cellsuno.cxx
+++ b/sc/source/ui/unoobj/cellsuno.cxx
@@ -1098,7 +1098,7 @@ static bool lcl_PutDataArray( ScDocShell& rDocShell, 
const ScRange& rRange,
                         const uno::Sequence< uno::Sequence<uno::Any> >& aData )
 {
     ScDocument& rDoc = rDocShell.GetDocument();
-    ScDocFunc& rDocFunc = rDocShell.GetDocFunc();
+    ScFieldEditEngine& rEngine = rDoc.GetEditEngine();
     SCTAB nTab = rRange.aStart.Tab();
     SCCOL nStartCol = rRange.aStart.Col();
     SCROW nStartRow = rRange.aStart.Row();
@@ -1175,7 +1175,19 @@ static bool lcl_PutDataArray( ScDocShell& rDocShell, 
const ScRange& rRange,
                         rElement >>= aUStr;
                         if ( !aUStr.isEmpty() )
                         {
-                            rDocFunc.SetStringOrEditCell(aPos, aUStr, false);
+                            // tdf#146454 - check for a multiline string since 
setting an edit
+                            // or string cell is in magnitudes slower than 
setting a plain string
+                            if (ScStringUtil::isMultiline(aUStr))
+                            {
+                                rEngine.SetTextCurrentDefaults(aUStr);
+                                rDoc.SetEditText(aPos, 
rEngine.CreateTextObject());
+                            }
+                            else
+                            {
+                                ScSetStringParam aParam;
+                                aParam.setTextInput();
+                                rDoc.SetString(aPos, aUStr, &aParam);
+                            }
                         }
                     }
                     break;

Reply via email to