[Libreoffice-commits] core.git: Branch 'libreoffice-4-1-4' - sc/source

Eike Rathke erack at redhat.com
Tue Dec 10 03:28:06 PST 2013


 sc/source/ui/docshell/docfunc.cxx |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

New commits:
commit 549310b41fe732283d82dbd3eb313f3c93f15de8
Author: Eike Rathke <erack at redhat.com>
Date:   Fri Dec 6 22:58:25 2013 +0100

    resolved fdo#66564 calculate formula cell once if AutoCalc disabled
    
    Was lost with 2ce72093cdc68e60fb06ddd4358e0bc7fc8c63a9 and previous
    restructuring.
    
    (cherry picked from commit 2212051e792cb5f51f4191afe83c85fc3730a087)
    
    Backported.
    
    Change-Id: Ie4c8bdb287b56448406c873840c26ec4759de375
    Reviewed-on: https://gerrit.libreoffice.org/6965
    Reviewed-by: Kohei Yoshida <libreoffice at kohei.us>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index 61786e2..b922508 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -948,6 +948,24 @@ bool ScDocFunc::SetFormulaCell( const ScAddress& rPos, ScFormulaCell* pCell, boo
 
     pDoc->SetFormulaCell(rPos, xCell.release());
 
+    // For performance reasons API calls may disable calculation while
+    // operating and recalculate once when done. If through user interaction
+    // and AutoCalc is disabled, calculate the formula (without its
+    // dependencies) once so the result matches the current document's content.
+    if (bInteraction && !pDoc->GetAutoCalc() && pCell)
+    {
+        // ScDocument/ScTable::SetFormulaCell() may have deleted pCell if
+        // position address was invalid, so check here again. This is
+        // backported code, new code handles that smarter..
+        if (rPos.Tab() < pDoc->GetTableCount() && ValidColRow( rPos.Col(), rPos.Row()))
+        {
+            // calculate just the cell once and set Dirty again
+            pCell->Interpret();
+            pCell->SetDirtyVar();
+            pDoc->PutInFormulaTree( pCell);
+        }
+    }
+
     if (bUndo)
     {
         svl::IUndoManager* pUndoMgr = rDocShell.GetUndoManager();


More information about the Libreoffice-commits mailing list