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

Dennis Francis (via logerrit) logerrit at kemper.freedesktop.org
Tue Apr 2 15:07:00 UTC 2019


 sc/source/ui/view/output.cxx |   42 ++++++++++++++++++++++++++++--------------
 1 file changed, 28 insertions(+), 14 deletions(-)

New commits:
commit 33c1389a52be0e839584948be174ebed110522c5
Author:     Dennis Francis <dennis.francis at collabora.com>
AuthorDate: Wed Mar 27 14:25:03 2019 +0530
Commit:     Dennis Francis <dennis.francis at collabora.com>
CommitDate: Tue Apr 2 17:06:35 2019 +0200

    tdf#124266 : Paint cell if formula-cell has changed even if...
    
    not dirty.
    
    Change-Id: Id54811009079438945bb162dd3eb8705ce174781
    Reviewed-on: https://gerrit.libreoffice.org/70043
    Tested-by: Jenkins
    Reviewed-by: Dennis Francis <dennis.francis at collabora.com>

diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx
index 616e6d2073d7..bd3d0bafd60a 100644
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -1803,9 +1803,11 @@ void ScOutputData::FindChanged()
     for (nArrY=0; nArrY<nArrCount; nArrY++)
         pRowInfo[nArrY].bChanged = false;
 
-    bool bProgress = false;
     SCCOL nCol1 = MAXCOL, nCol2 = 0;
     SCROW nRow1 = MAXROW, nRow2 = 0;
+    bool bAnyDirty = false;
+    bool bAnyChanged = false;
+
     for (nArrY=0; nArrY<nArrCount; nArrY++)
     {
         RowInfo* pThisRowInfo = &pRowInfo[nArrY];
@@ -1817,26 +1819,34 @@ void ScOutputData::FindChanged()
                 continue;
 
             ScFormulaCell* pFCell = rCell.mpFormula;
-            if ( !bProgress && pFCell->GetDirty() )
-            {
-                ScProgress::CreateInterpretProgress(mpDoc);
-                bProgress = true;
-            }
             if (pFCell->IsRunning())
                 // still being interpreted. Skip it.
                 continue;
 
-            ScAddress& rPos(pFCell->aPos);
-            nCol1 = std::min(rPos.Col(), nCol1);
-            nCol2 = std::max(rPos.Col(), nCol2);
-            nRow1 = std::min(rPos.Row(), nRow1);
-            nRow2 = std::max(rPos.Row(), nRow2);
+            bool bDirty = pFCell->GetDirty();
+            bAnyChanged = bAnyChanged || pFCell->IsChanged();
+
+            if (bDirty)
+            {
+                if (!bAnyDirty)
+                {
+                    ScProgress::CreateInterpretProgress(mpDoc);
+                    bAnyDirty = true;
+                }
+
+                ScAddress& rPos(pFCell->aPos);
+                nCol1 = std::min(rPos.Col(), nCol1);
+                nCol2 = std::max(rPos.Col(), nCol2);
+                nRow1 = std::min(rPos.Row(), nRow1);
+                nRow2 = std::max(rPos.Row(), nRow2);
+            }
         }
     }
 
-    if (bProgress)
+    if (bAnyDirty || bAnyChanged)
     {
-        mpDoc->EnsureFormulaCellResults(ScRange(nCol1, nRow1, nTab, nCol2, nRow2, nTab), true);
+        if (bAnyDirty)
+            mpDoc->EnsureFormulaCellResults(ScRange(nCol1, nRow1, nTab, nCol2, nRow2, nTab), true);
 
         for (nArrY=0; nArrY<nArrCount; nArrY++)
         {
@@ -1849,6 +1859,9 @@ void ScOutputData::FindChanged()
                     continue;
 
                 ScFormulaCell* pFCell = rCell.mpFormula;
+                if (pFCell->IsRunning())
+                    // still being interpreted. Skip it.
+                    continue;
 
                 if (!pFCell->IsChanged())
                     // the result hasn't changed. Skip it.
@@ -1868,7 +1881,8 @@ void ScOutputData::FindChanged()
             }
         }
 
-        ScProgress::DeleteInterpretProgress();
+        if (bAnyDirty)
+            ScProgress::DeleteInterpretProgress();
     }
 
     mpDoc->EnableIdle(bWasIdleEnabled);


More information about the Libreoffice-commits mailing list