[PATCH] Properly invalidate cached sheet XML streams during reference update.

Kohei Yoshida kyoshida at novell.com
Tue Mar 8 01:55:13 PST 2011


Failure to invalidate sheet streams during reference update caused
formula cross referenceing between sheets to totallly get borked.

The bug was originally reported in i#116833.

Signed off by Petr Mladek <pmladek at suse.cz>
---
 sc/inc/cell.hxx                |    2 +-
 sc/inc/column.hxx              |    2 +-
 sc/source/core/data/cell2.cxx  |   11 ++++++++++-
 sc/source/core/data/column.cxx |   13 +++++++++----
 sc/source/core/data/table1.cxx |    8 ++++++--
 sc/source/core/data/table2.cxx |   32 ++++++++++++++++++++++++++++++--
 6 files changed, 57 insertions(+), 11 deletions(-)

diff --git a/sc/inc/cell.hxx b/sc/inc/cell.hxx
index 1f2693b..8fd9da3 100644
--- a/sc/inc/cell.hxx
+++ b/sc/inc/cell.hxx
@@ -440,7 +440,7 @@ public:
     BOOL			HasRelNameReference() const;
     BOOL			HasColRowName() const;
 
-    void			UpdateReference(UpdateRefMode eUpdateRefMode,
+    bool			UpdateReference(UpdateRefMode eUpdateRefMode,
                                     const ScRange& r,
                                     SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
                                     ScDocument* pUndoDoc = NULL,
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index cf193de..e0ef949 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -286,7 +286,7 @@ public:
 
     void		ResetChanged( SCROW nStartRow, SCROW nEndRow );
 
-    void		UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
+    bool        UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
                                      SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
                                      SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
                                      ScDocument* pUndoDoc = NULL );
diff --git a/sc/source/core/data/cell2.cxx b/sc/source/core/data/cell2.cxx
index 7471fdb..b6fa4b7 100644
--- a/sc/source/core/data/cell2.cxx
+++ b/sc/source/core/data/cell2.cxx
@@ -829,11 +829,13 @@ BOOL ScFormulaCell::HasColRowName() const
     return (pCode->GetNextColRowName() != NULL);
 }
 
-void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
+bool ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
                                     const ScRange& r,
                                     SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
                                     ScDocument* pUndoDoc, const ScAddress* pUndoCellPos )
 {
+    bool bCellStateChanged = false;
+
     SCCOL nCol1 = r.aStart.Col();
     SCROW nRow1 = r.aStart.Row();
     SCTAB nTab1 = r.aStart.Tab();
@@ -862,6 +864,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
                     nCol = 0;
                 else if ( nCol > MAXCOL )
                     nCol = MAXCOL;
+                bCellStateChanged = aPos.Col() != nCol;
                 aPos.SetCol( nCol );
 //              bPosChanged = TRUE;
             }
@@ -876,6 +879,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
                     nRow = 0;
                 else if ( nRow > MAXROW )
                     nRow = MAXROW;
+                bCellStateChanged = aPos.Row() != nRow;
                 aPos.SetRow( nRow );
 //              bPosChanged = TRUE;
             }
@@ -891,6 +895,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
                     nTab = 0;
                 else if ( nTab > nMaxTab )
                     nTab = nMaxTab;
+                bCellStateChanged = aPos.Tab() != nTab;
                 aPos.SetTab( nTab );
 //              bPosChanged = TRUE;
             }
@@ -940,6 +945,9 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
             bRangeModified = FALSE;
             bRefSizeChanged = FALSE;
         }
+
+        bCellStateChanged |= bValChanged;
+
         if ( bOnRefMove )
             bOnRefMove = (bValChanged || (aPos != aOldPos));
             // Cell may reference itself, e.g. ocColumn, ocRow without parameter
@@ -1126,6 +1134,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
 
         delete pOld;
     }
+    return bCellStateChanged;
 }
 
 void ScFormulaCell::UpdateInsertTab(SCTAB nTable)
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 0ae30f5..4998d3a 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1622,10 +1622,11 @@ void ScColumn::MoveTo(SCROW nStartRow, SCROW nEndRow, ScColumn& rCol)
 }
 
 
-void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
+bool ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
              SCCOL nCol2, SCROW nRow2, SCTAB nTab2, SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
              ScDocument* pUndoDoc )
 {
+    bool bUpdated = false;
     if (pItems)
     {
         ScRange aRange( ScAddress( nCol1, nRow1, nTab1 ),
@@ -1637,7 +1638,8 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
             {
                 ScFormulaCell* pCell = (ScFormulaCell*) pItems[nIndex].pCell;
                 if( pCell->GetCellType() == CELLTYPE_FORMULA)
-                    pCell->UpdateReference(	eUpdateRefMode, aRange, nDx, nDy, nDz, pUndoDoc );
+                    bUpdated |= pCell->UpdateReference(
+                        eUpdateRefMode, aRange, nDx, nDy, nDz, pUndoDoc );
             }
         }
         else
@@ -1658,7 +1660,8 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
                     ScBaseCell* pCell = pItems[i].pCell;
                     if( pCell->GetCellType() == CELLTYPE_FORMULA)
                     {
-                        ((ScFormulaCell*)pCell)->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz, pUndoDoc );
+                        bUpdated |= ((ScFormulaCell*)pCell)->UpdateReference(
+                            eUpdateRefMode, aRange, nDx, nDy, nDz, pUndoDoc );
                         if ( nRow != pItems[i].nRow )
                             Search( nRow, i );  // Listener removed/inserted?
                     }
@@ -1676,7 +1679,8 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
                         // When deleting rows on several sheets, the formula's position may be updated with the first call,
                         // so the undo position must be passed from here.
                         ScAddress aUndoPos( nCol, nRow, nTab );
-                        ((ScFormulaCell*)pCell)->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz, pUndoDoc, &aUndoPos );
+                        bUpdated |= ((ScFormulaCell*)pCell)->UpdateReference(
+                            eUpdateRefMode, aRange, nDx, nDy, nDz, pUndoDoc, &aUndoPos );
                         if ( nRow != pItems[i].nRow )
                             Search( nRow, i );  // Listener removed/inserted?
                     }
@@ -1684,6 +1688,7 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
             }
         }
     }
+    return bUpdated;
 }
 
 
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index 68904d2..6e1ecff 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -1288,6 +1288,7 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
                      SCCOL nCol2, SCROW nRow2, SCTAB nTab2, SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
                      ScDocument* pUndoDoc, BOOL bIncludeDraw, bool bUpdateNoteCaptionPos )
 {
+    bool bUpdated = false;
     SCCOL i;
     SCCOL iMax;
     if ( eUpdateRefMode == URM_COPY )
@@ -1301,8 +1302,8 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
         iMax = MAXCOL;
     }
     for ( ; i<=iMax; i++)
-        aCol[i].UpdateReference( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2,
-                                    nDx, nDy, nDz, pUndoDoc );
+        bUpdated |= aCol[i].UpdateReference(
+            eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz, pUndoDoc );
 
     if ( bIncludeDraw )
         UpdateDrawRef( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz, bUpdateNoteCaptionPos );
@@ -1387,6 +1388,9 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
                                     PAINT_GRID ) );
         }
     }
+
+    if (bUpdated && IsStreamValid())
+        SetStreamValid(false);
 }
 
 void ScTable::UpdateTranspose( const ScRange& rSource, const ScAddress& rDest,
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index a852f7c..8c26824 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -179,6 +179,11 @@ void ScTable::InsertRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
     DecRecalcLevel( false );
 
     InvalidatePageBreaks();
+
+    if (IsStreamValid())
+        // TODO: In the future we may want to check if the table has been
+        // really modified before setting the stream invalid.
+        SetStreamValid(false);
 }
 
 
@@ -224,6 +229,11 @@ void ScTable::DeleteRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
     DecRecalcLevel();
 
     InvalidatePageBreaks();
+
+    if (IsStreamValid())
+        // TODO: In the future we may want to check if the table has been
+        // really modified before setting the stream invalid.
+        SetStreamValid(false);
 }
 
 
@@ -311,6 +321,11 @@ void ScTable::InsertCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
     DecRecalcLevel();
 
     InvalidatePageBreaks();
+
+    if (IsStreamValid())
+        // TODO: In the future we may want to check if the table has been
+        // really modified before setting the stream invalid.
+        SetStreamValid(false);
 }
 
 
@@ -371,6 +386,11 @@ void ScTable::DeleteCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
     DecRecalcLevel();
 
     InvalidatePageBreaks();
+
+    if (IsStreamValid())
+        // TODO: In the future we may want to check if the table has been
+        // really modified before setting the stream invalid.
+        SetStreamValid(false);
 }
 
 
@@ -398,9 +418,12 @@ void ScTable::DeleteArea(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, USH
             aPattern.GetItemSet().Put( ScProtectionAttr( FALSE ) );
             ApplyPatternArea( nCol1, nRow1, nCol2, nRow2, aPattern );
         }
-
-//		DecRecalcLevel();
     }
+
+    if (IsStreamValid())
+        // TODO: In the future we may want to check if the table has been
+        // really modified before setting the stream invalid.
+        SetStreamValid(false);
 }
 
 
@@ -424,6 +447,11 @@ void ScTable::DeleteSelection( USHORT nDelFlag, const ScMarkData& rMark )
         SfxItemPoolCache aCache( pPool, &aSet );
         ApplySelectionCache( &aCache, rMark );
     }
+
+    if (IsStreamValid())
+        // TODO: In the future we may want to check if the table has been
+        // really modified before setting the stream invalid.
+        SetStreamValid(false);
 }
 
 
-- 
1.7.3.4


--=-pUrVijllSHa+f9yNC/Zf
Content-Disposition: attachment; filename="defuzzed.diff"
Content-Type: text/x-patch; name="defuzzed.diff"; charset="UTF-8"
Content-Transfer-Encoding: 7bit

--- sheet-stream-validity-fix.patch	2011-03-08 10:16:25.000000000 +0100
+++ 0001-Properly-invalidate-cached-sheet-XML-streams-during-.patch	2011-03-08 10:56:28.000000000 +0100
@@ -1,16 +1,25 @@
-commit e98dd6643b15a156dbf3574343f3c076ad7ac277
-Author: Kohei Yoshida <kyoshida at novell.com>
-Date:   Mon Mar 7 18:40:10 2011 -0500
+From 1ebf64611845c4324ddb930d685365b6cb83382b Mon Sep 17 00:00:00 2001
+From: Kohei Yoshida <kyoshida at novell.com>
+Date: Tue, 8 Mar 2011 10:55:13 +0100
+Subject: [PATCH] Properly invalidate cached sheet XML streams during reference update.
 
-    Properly invalidate cached sheet XML streams during reference update.
-    
-    Failure to invalidate sheet streams during reference update caused
-    formula cross referenceing between sheets to totallly get borked.
-    
-    The bug was originally reported in i#116833.
+Failure to invalidate sheet streams during reference update caused
+formula cross referenceing between sheets to totallly get borked.
+
+The bug was originally reported in i#116833.
+
+Signed off by Petr Mladek <pmladek at suse.cz>
+---
+ sc/inc/cell.hxx                |    2 +-
+ sc/inc/column.hxx              |    2 +-
+ sc/source/core/data/cell2.cxx  |   11 ++++++++++-
+ sc/source/core/data/column.cxx |   13 +++++++++----
+ sc/source/core/data/table1.cxx |    8 ++++++--
+ sc/source/core/data/table2.cxx |   32 ++++++++++++++++++++++++++++++--
+ 6 files changed, 57 insertions(+), 11 deletions(-)
 
 diff --git a/sc/inc/cell.hxx b/sc/inc/cell.hxx
-index 110c848..38e85ef 100644
+index 1f2693b..8fd9da3 100644
 --- a/sc/inc/cell.hxx
 +++ b/sc/inc/cell.hxx
 @@ -440,7 +440,7 @@ public:
@@ -23,23 +32,23 @@ index 110c848..38e85ef 100644
                                      SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
                                      ScDocument* pUndoDoc = NULL,
 diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
-index 35d26b0..e4ab44b 100644
+index cf193de..e0ef949 100644
 --- a/sc/inc/column.hxx
 +++ b/sc/inc/column.hxx
-@@ -285,7 +285,7 @@ public:
+@@ -286,7 +286,7 @@ public:
  
-     void        ResetChanged( SCROW nStartRow, SCROW nEndRow );
+     void		ResetChanged( SCROW nStartRow, SCROW nEndRow );
  
--    void        UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
+-    void		UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
 +    bool        UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
                                       SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
                                       SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
                                       ScDocument* pUndoDoc = NULL );
 diff --git a/sc/source/core/data/cell2.cxx b/sc/source/core/data/cell2.cxx
-index a47dd14..06f53dc 100644
+index 7471fdb..b6fa4b7 100644
 --- a/sc/source/core/data/cell2.cxx
 +++ b/sc/source/core/data/cell2.cxx
-@@ -825,11 +825,13 @@ BOOL ScFormulaCell::HasColRowName() const
+@@ -829,11 +829,13 @@ BOOL ScFormulaCell::HasColRowName() const
      return (pCode->GetNextColRowName() != NULL);
  }
  
@@ -54,33 +63,33 @@ index a47dd14..06f53dc 100644
      SCCOL nCol1 = r.aStart.Col();
      SCROW nRow1 = r.aStart.Row();
      SCTAB nTab1 = r.aStart.Tab();
-@@ -858,6 +860,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
+@@ -862,6 +864,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
                      nCol = 0;
                  else if ( nCol > MAXCOL )
                      nCol = MAXCOL;
 +                bCellStateChanged = aPos.Col() != nCol;
                  aPos.SetCol( nCol );
+ //              bPosChanged = TRUE;
              }
-         }
-@@ -871,6 +874,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
+@@ -876,6 +879,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
                      nRow = 0;
                  else if ( nRow > MAXROW )
                      nRow = MAXROW;
 +                bCellStateChanged = aPos.Row() != nRow;
                  aPos.SetRow( nRow );
+ //              bPosChanged = TRUE;
              }
-         }
-@@ -885,6 +889,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
+@@ -891,6 +895,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
                      nTab = 0;
                  else if ( nTab > nMaxTab )
                      nTab = nMaxTab;
 +                bCellStateChanged = aPos.Tab() != nTab;
                  aPos.SetTab( nTab );
+ //              bPosChanged = TRUE;
              }
-         }
-@@ -932,6 +937,9 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
-             bRangeModified = false;
-             bRefSizeChanged = false;
+@@ -940,6 +945,9 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
+             bRangeModified = FALSE;
+             bRefSizeChanged = FALSE;
          }
 +
 +        bCellStateChanged |= bValChanged;
@@ -88,7 +97,7 @@ index a47dd14..06f53dc 100644
          if ( bOnRefMove )
              bOnRefMove = (bValChanged || (aPos != aOldPos));
              // Cell may reference itself, e.g. ocColumn, ocRow without parameter
-@@ -1118,6 +1126,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
+@@ -1126,6 +1134,7 @@ void ScFormulaCell::UpdateReference(UpdateRefMode eUpdateRefMode,
  
          delete pOld;
      }
@@ -97,10 +106,10 @@ index a47dd14..06f53dc 100644
  
  void ScFormulaCell::UpdateInsertTab(SCTAB nTable)
 diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
-index 9e13354..86415b3 100644
+index 0ae30f5..4998d3a 100644
 --- a/sc/source/core/data/column.cxx
 +++ b/sc/source/core/data/column.cxx
-@@ -1617,10 +1617,11 @@ void ScColumn::MoveTo(SCROW nStartRow, SCROW nEndRow, ScColumn& rCol)
+@@ -1622,10 +1622,11 @@ void ScColumn::MoveTo(SCROW nStartRow, SCROW nEndRow, ScColumn& rCol)
  }
  
  
@@ -113,7 +122,7 @@ index 9e13354..86415b3 100644
      if (pItems)
      {
          ScRange aRange( ScAddress( nCol1, nRow1, nTab1 ),
-@@ -1632,7 +1633,8 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
+@@ -1637,7 +1638,8 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
              {
                  ScFormulaCell* pCell = (ScFormulaCell*) pItems[nIndex].pCell;
                  if( pCell->GetCellType() == CELLTYPE_FORMULA)
@@ -123,7 +132,7 @@ index 9e13354..86415b3 100644
              }
          }
          else
-@@ -1653,7 +1655,8 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
+@@ -1658,7 +1660,8 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
                      ScBaseCell* pCell = pItems[i].pCell;
                      if( pCell->GetCellType() == CELLTYPE_FORMULA)
                      {
@@ -133,7 +142,7 @@ index 9e13354..86415b3 100644
                          if ( nRow != pItems[i].nRow )
                              Search( nRow, i );  // Listener removed/inserted?
                      }
-@@ -1671,7 +1674,8 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
+@@ -1676,7 +1679,8 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
                          // When deleting rows on several sheets, the formula's position may be updated with the first call,
                          // so the undo position must be passed from here.
                          ScAddress aUndoPos( nCol, nRow, nTab );
@@ -143,7 +152,7 @@ index 9e13354..86415b3 100644
                          if ( nRow != pItems[i].nRow )
                              Search( nRow, i );  // Listener removed/inserted?
                      }
-@@ -1679,6 +1683,7 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
+@@ -1684,6 +1688,7 @@ void ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
              }
          }
      }
@@ -152,10 +161,10 @@ index 9e13354..86415b3 100644
  
  
 diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
-index f4e71bd..bd25fa3 100644
+index 68904d2..6e1ecff 100644
 --- a/sc/source/core/data/table1.cxx
 +++ b/sc/source/core/data/table1.cxx
-@@ -1280,6 +1280,7 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
+@@ -1288,6 +1288,7 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
                       SCCOL nCol2, SCROW nRow2, SCTAB nTab2, SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
                       ScDocument* pUndoDoc, BOOL bIncludeDraw, bool bUpdateNoteCaptionPos )
  {
@@ -163,7 +172,7 @@ index f4e71bd..bd25fa3 100644
      SCCOL i;
      SCCOL iMax;
      if ( eUpdateRefMode == URM_COPY )
-@@ -1293,8 +1294,8 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
+@@ -1301,8 +1302,8 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
          iMax = MAXCOL;
      }
      for ( ; i<=iMax; i++)
@@ -174,7 +183,7 @@ index f4e71bd..bd25fa3 100644
  
      if ( bIncludeDraw )
          UpdateDrawRef( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz, bUpdateNoteCaptionPos );
-@@ -1379,6 +1380,9 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
+@@ -1387,6 +1388,9 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
                                      PAINT_GRID ) );
          }
      }
@@ -185,10 +194,10 @@ index f4e71bd..bd25fa3 100644
  
  void ScTable::UpdateTranspose( const ScRange& rSource, const ScAddress& rDest,
 diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
-index 808f952..bc00fe8 100644
+index a852f7c..8c26824 100644
 --- a/sc/source/core/data/table2.cxx
 +++ b/sc/source/core/data/table2.cxx
-@@ -177,6 +177,11 @@ void ScTable::InsertRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
+@@ -179,6 +179,11 @@ void ScTable::InsertRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
      DecRecalcLevel( false );
  
      InvalidatePageBreaks();
@@ -200,7 +209,7 @@ index 808f952..bc00fe8 100644
  }
  
  
-@@ -222,6 +227,11 @@ void ScTable::DeleteRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
+@@ -224,6 +229,11 @@ void ScTable::DeleteRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
      DecRecalcLevel();
  
      InvalidatePageBreaks();
@@ -212,7 +221,7 @@ index 808f952..bc00fe8 100644
  }
  
  
-@@ -309,6 +319,11 @@ void ScTable::InsertCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
+@@ -311,6 +321,11 @@ void ScTable::InsertCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
      DecRecalcLevel();
  
      InvalidatePageBreaks();
@@ -224,7 +233,7 @@ index 808f952..bc00fe8 100644
  }
  
  
-@@ -369,6 +384,11 @@ void ScTable::DeleteCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
+@@ -371,6 +386,11 @@ void ScTable::DeleteCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
      DecRecalcLevel();
  
      InvalidatePageBreaks();
@@ -236,9 +245,12 @@ index 808f952..bc00fe8 100644
  }
  
  
-@@ -395,6 +415,11 @@ void ScTable::DeleteArea(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, USH
+@@ -398,9 +418,12 @@ void ScTable::DeleteArea(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, USH
+             aPattern.GetItemSet().Put( ScProtectionAttr( FALSE ) );
              ApplyPatternArea( nCol1, nRow1, nCol2, nRow2, aPattern );
          }
+-
+-//		DecRecalcLevel();
      }
 +
 +    if (IsStreamValid())
@@ -248,7 +260,7 @@ index 808f952..bc00fe8 100644
  }
  
  
-@@ -418,6 +443,11 @@ void ScTable::DeleteSelection( USHORT nDelFlag, const ScMarkData& rMark )
+@@ -424,6 +447,11 @@ void ScTable::DeleteSelection( USHORT nDelFlag, const ScMarkData& rMark )
          SfxItemPoolCache aCache( pPool, &aSet );
          ApplySelectionCache( &aCache, rMark );
      }
@@ -260,3 +272,6 @@ index 808f952..bc00fe8 100644
  }
  
  
+-- 
+1.7.3.4
+

--=-pUrVijllSHa+f9yNC/Zf--



More information about the LibreOffice mailing list