diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-01-29 14:00:47 -0500 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2014-01-30 23:40:11 +0000 |
commit | 92346fb7714ca7c6a467771d8a8b01305c1b17d1 (patch) | |
tree | 8eafb751f8ab5095bb79a168c36859052eec0498 | |
parent | 383e5543593848cbd1458d5c5dad5e7b7b17ee09 (diff) |
fdo#74014: Broadcast changes during undo and redo after paste.
Change-Id: I271bbba5e5eb70e48274a4a062d125456af8ff6c
(cherry picked from commit f5d8029a456c2c708cbc2b67f2d7875540dff1ab)
Reviewed-on: https://gerrit.libreoffice.org/7728
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
-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 032ef8e87088..67d75726799c 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -213,7 +213,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); @@ -408,7 +409,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 665fb3589a02..1f8ced4d5451 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 7877a1ce8838..2e1cfd50d040 100644 --- a/sc/inc/table.hxx +++ b/sc/inc/table.hxx @@ -622,7 +622,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 798d5444a570..54b53f23cf69 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 c9f14cf44eab..11b6507a381b 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -5575,20 +5575,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 ffbda7a84f57..5661fd756932 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(); |