Kohei Yoshida píše v Po 07. 03. 2011 v 23:13 -0500: > Hi there, > > I'd like to backport a fix from master to the libreoffice-3-3. The > patch is attached, which is a cleaned up version of > > http://cgit.freedesktop.org/libreoffice/calc/commit/?id=e98dd6643b15a156dbf3574343f3c076ad7ac277 > > The patch would likely not apply cleanly due to some BOOL to bool > conversions I've been doing on master, but that's trivial to fix.
I have attached that variant for libreoffice-3-3 branch, see 0001-Prope...diff Note that I needed to update the context for for sc/source/core/data/table2.cxx and ScTable::DeleteArea. Otherwise, it applied the last two hunks in a wrong place. See defuzzed.diff for the difference against the original diff. Anyway, the fix looks fine and quite safe to me. Best Regards, Petr
>From 1ebf64611845c4324ddb930d685365b6cb83382b Mon Sep 17 00:00:00 2001 From: Kohei Yoshida <[email protected]> Date: Tue, 8 Mar 2011 10:55:13 +0100 Subject: [PATCH] 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. Signed off by Petr Mladek <[email protected]> --- 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
--- 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 <[email protected]> -Date: Mon Mar 7 18:40:10 2011 -0500 +From 1ebf64611845c4324ddb930d685365b6cb83382b Mon Sep 17 00:00:00 2001 +From: Kohei Yoshida <[email protected]> +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 <[email protected]> +--- + 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 +
_______________________________________________ LibreOffice mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice
