summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@suse.com>2012-01-26 15:47:52 -0500
committerKohei Yoshida <kohei.yoshida@suse.com>2012-01-26 15:50:02 -0500
commitaf70bc00c6714eb8695babdf5af07416552f7034 (patch)
treee5acd6a702753ee372b05e14e7240add06695f9a
parentd3e30409530a94470a3c19612663b26a9eafa683 (diff)
fdo#44143: Keep cells with broadcasters alive during deletion.
Or else it would partially break formula reference chain.
-rw-r--r--sc/source/core/data/column3.cxx7
-rw-r--r--sc/source/core/data/dpoutput.cxx5
2 files changed, 7 insertions, 5 deletions
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 73c0bbbde9bb..8bd0a452a1f3 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -35,6 +35,7 @@
#include <sfx2/objsh.hxx>
#include <svl/zforlist.hxx>
#include <svl/zformat.hxx>
+#include <svl/broadcast.hxx>
#include "scitems.hxx"
#include "column.hxx"
@@ -414,6 +415,12 @@ void ScColumn::DeleteRange( SCSIZE nStartIndex, SCSIZE nEndIndex, sal_uInt16 nDe
if( pNote || pBC )
pNoteCell = new ScNoteCell( pNote, pBC );
}
+ else
+ {
+ SvtBroadcaster* pBC = pOldCell->GetBroadcaster();
+ if (pBC && pBC->HasListeners())
+ pNoteCell = new ScNoteCell(pOldCell->ReleaseNote(), pBC);
+ }
// remove cell entry in cell item list
SCROW nOldRow = maItems[nIdx].nRow;
diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx
index 32179e3807aa..ccec280fb305 100644
--- a/sc/source/core/data/dpoutput.cxx
+++ b/sc/source/core/data/dpoutput.cxx
@@ -973,11 +973,6 @@ void ScDPOutput::Output()
if ( bSizeOverflow || bResultsError ) // does output area exceed sheet limits?
return; // nothing
- // clear whole (new) output area
- //! when modifying table, clear old area
- //! include IDF_OBJECTS ???
- pDoc->DeleteAreaTab( aStartPos.Col(), aStartPos.Row(), nTabEndCol, nTabEndRow, nTab, IDF_ALL );
-
if ( bDoFilter )
lcl_DoFilterButton( pDoc, aStartPos.Col(), aStartPos.Row(), nTab );