diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-01-29 14:00:47 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-01-29 15:46:06 -0500 |
commit | f5d8029a456c2c708cbc2b67f2d7875540dff1ab (patch) | |
tree | 177af79cf1ba9b5a04e45c873c9b66ef65a4f905 | |
parent | ccd7953e0042c8063e3cbd8e3a3dd9004c1b4f7e (diff) |
fdo#74014: Broadcast changes during undo and redo after paste.
Change-Id: I271bbba5e5eb70e48274a4a062d125456af8ff6c
-rw-r--r-- | sc/inc/column.hxx | 5 | ||||
-rw-r--r-- | sc/inc/document.hxx | 4 | ||||
-rw-r--r-- | sc/inc/table.hxx | 2 | ||||
-rw-r--r-- | sc/source/core/data/column.cxx | 4 | ||||
-rw-r--r-- | sc/source/core/data/column3.cxx | 12 | ||||
-rw-r--r-- | sc/source/core/data/document.cxx | 9 | ||||
-rw-r--r-- | sc/source/core/data/table2.cxx | 4 | ||||
-rw-r--r-- | sc/source/ui/undo/undoblk.cxx | 5 |
8 files changed, 27 insertions, 18 deletions
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index e08226cd3917..1ac1e3fc4da3 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -214,7 +214,8 @@ public: bool TestInsertRow( SCROW nStartRow, SCSIZE nSize ) const; void InsertRow( SCROW nStartRow, SCSIZE nSize ); void DeleteRow( SCROW nStartRow, SCSIZE nSize ); - void DeleteArea(SCROW nStartRow, SCROW nEndRow, sal_uInt16 nDelFlag ); + void DeleteArea( + SCROW nStartRow, SCROW nEndRow, sal_uInt16 nDelFlag, bool bBroadcast = true ); void CopyToClip( sc::CopyToClipContext& rCxt, SCROW nRow1, SCROW nRow2, ScColumn& rColumn ) const; void CopyStaticToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol); @@ -412,7 +413,7 @@ public: void RemoveProtected( SCROW nStartRow, SCROW nEndRow ); SCsROW ApplySelectionCache( SfxItemPoolCache* pCache, const ScMarkData& rMark, ScEditDataArray* pDataArray = NULL ); - void DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark ); + void DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark, bool bBroadcast ); void ClearSelectionItems( const sal_uInt16* pWhich, const ScMarkData& rMark ); void ChangeSelectionIndent( bool bIncrement, const ScMarkData& rMark ); diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 5fb5f6d0c236..d39cb09680cb 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -1441,8 +1441,8 @@ public: SC_DLLPUBLIC void ApplySelectionPattern( const ScPatternAttr& rAttr, const ScMarkData& rMark, ScEditDataArray* pDataArray = NULL ); - void DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark ); - void DeleteSelectionTab( SCTAB nTab, sal_uInt16 nDelFlag, const ScMarkData& rMark ); + void DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark, bool bBroadcast = true ); + void DeleteSelectionTab( SCTAB nTab, sal_uInt16 nDelFlag, const ScMarkData& rMark, bool bBroadcast = true ); SC_DLLPUBLIC void SetColWidth( SCCOL nCol, SCTAB nTab, sal_uInt16 nNewWidth ); SC_DLLPUBLIC void SetColWidthOnly( SCCOL nCol, SCTAB nTab, sal_uInt16 nNewWidth ); diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx index 00bddb975f0d..bc1008995065 100644 --- a/sc/inc/table.hxx +++ b/sc/inc/table.hxx @@ -629,7 +629,7 @@ public: bool RemoveFlags( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, sal_Int16 nFlags ); void ApplySelectionCache( SfxItemPoolCache* pCache, const ScMarkData& rMark, ScEditDataArray* pDataArray = NULL ); - void DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark ); + void DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark, bool bBroadcast = true ); void ClearSelectionItems( const sal_uInt16* pWhich, const ScMarkData& rMark ); void ChangeSelectionIndent( bool bIncrement, const ScMarkData& rMark ); diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index 8c6102f9c79f..7771f0e065f8 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -484,7 +484,7 @@ void ScColumn::ClearSelectionItems( const sal_uInt16* pWhich,const ScMarkData& r } -void ScColumn::DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark ) +void ScColumn::DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark, bool bBroadcast ) { SCROW nTop; SCROW nBottom; @@ -493,7 +493,7 @@ void ScColumn::DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark ) { ScMarkArrayIter aMarkIter( rMark.GetArray() + nCol ); while (aMarkIter.Next( nTop, nBottom )) - DeleteArea(nTop, nBottom, nDelFlag); + DeleteArea(nTop, nBottom, nDelFlag, bBroadcast); } } diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 2301b0f8590f..542fa88b5b58 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -574,7 +574,8 @@ public: } -void ScColumn::DeleteArea(SCROW nStartRow, SCROW nEndRow, sal_uInt16 nDelFlag) +void ScColumn::DeleteArea( + SCROW nStartRow, SCROW nEndRow, sal_uInt16 nDelFlag, bool bBroadcast ) { sal_uInt16 nContMask = IDF_CONTENTS; // IDF_NOCAPTIONS needs to be passed too, if IDF_NOTE is set @@ -626,9 +627,12 @@ void ScColumn::DeleteArea(SCROW nStartRow, SCROW nEndRow, sal_uInt16 nDelFlag) else if ((nDelFlag & IDF_HARDATTR) == IDF_HARDATTR) pAttrArray->DeleteHardAttr( nStartRow, nEndRow ); - // Broadcast on only cells that were deleted; no point broadcasting on - // cells that were already empty before the deletion. - BroadcastCells(aDeletedRows, SC_HINT_DATACHANGED); + if (bBroadcast) + { + // Broadcast on only cells that were deleted; no point broadcasting on + // cells that were already empty before the deletion. + BroadcastCells(aDeletedRows, SC_HINT_DATACHANGED); + } } bool ScColumn::InitBlockPosition( sc::ColumnBlockPosition& rBlockPos ) diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index 1f00bd7ccb13..94167a5c62fe 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -5618,20 +5618,21 @@ void ScDocument::ClearSelectionItems( const sal_uInt16* pWhich, const ScMarkData } -void ScDocument::DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark ) +void ScDocument::DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark, bool bBroadcast ) { SCTAB nMax = static_cast<SCTAB>(maTabs.size()); ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); for (; itr != itrEnd && *itr < nMax; ++itr) if (maTabs[*itr]) - maTabs[*itr]->DeleteSelection( nDelFlag, rMark ); + maTabs[*itr]->DeleteSelection(nDelFlag, rMark, bBroadcast); } -void ScDocument::DeleteSelectionTab( SCTAB nTab, sal_uInt16 nDelFlag, const ScMarkData& rMark ) +void ScDocument::DeleteSelectionTab( + SCTAB nTab, sal_uInt16 nDelFlag, const ScMarkData& rMark, bool bBroadcast ) { if (ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab]) - maTabs[nTab]->DeleteSelection( nDelFlag, rMark ); + maTabs[nTab]->DeleteSelection(nDelFlag, rMark, bBroadcast); else { OSL_FAIL("wrong table"); diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index f96d913b2cc5..ce4871afafe3 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -453,12 +453,12 @@ void ScTable::DeleteArea(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, sal } -void ScTable::DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark ) +void ScTable::DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark, bool bBroadcast ) { { // scope for bulk broadcast ScBulkBroadcast aBulkBroadcast( pDocument->GetBASM()); for (SCCOL i=0; i<=MAXCOL; i++) - aCol[i].DeleteSelection( nDelFlag, rMark ); + aCol[i].DeleteSelection(nDelFlag, rMark, bBroadcast); } ScRangeList aRangeList; diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx index 54c248632e29..13f529ee77ef 100644 --- a/sc/source/ui/undo/undoblk.cxx +++ b/sc/source/ui/undo/undoblk.cxx @@ -950,7 +950,10 @@ void ScUndoPaste::DoChange(bool bUndo) pDocShell->UpdatePaintExt(nExtFlags, maBlockRanges.Combine()); aMarkData.MarkToMulti(); - pDoc->DeleteSelection( nUndoFlags, aMarkData ); + pDoc->DeleteSelection(nUndoFlags, aMarkData, false); // no broadcasting here + for (size_t i = 0, n = maBlockRanges.size(); i < n; ++i) + pDoc->BroadcastCells(*maBlockRanges[i], SC_HINT_DATACHANGED); + aMarkData.MarkToSimple(); SCTAB nFirstSelected = aMarkData.GetFirstSelected(); |