[Libreoffice-commits] .: 2 commits - sc/source
Eike Rathke
erack at kemper.freedesktop.org
Fri Jan 27 04:52:28 PST 2012
sc/source/core/data/column3.cxx | 34 +++++++++++++++++++++-------------
sc/source/core/data/dpoutput.cxx | 5 +++++
2 files changed, 26 insertions(+), 13 deletions(-)
New commits:
commit 41e92ab2b7a8fcb7f5738f656bdac47bc0847f29
Author: Kohei Yoshida <kohei.yoshida at suse.com>
Date: Thu Jan 26 15:47:52 2012 -0500
fdo#44143: Keep cells with broadcasters alive during deletion.
Or else it would partially break formula reference chain.
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 73c0bbb..9a96323 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"
@@ -404,14 +405,25 @@ void ScColumn::DeleteRange( SCSIZE nStartIndex, SCSIZE nEndIndex, sal_uInt16 nDe
if (bDelete)
{
// try to create a replacement note cell, if note or broadcaster exists
- ScNoteCell* pNoteCell = 0;
- if (eCellType != CELLTYPE_NOTE)
+ ScNoteCell* pNoteCell = NULL;
+ SvtBroadcaster* pBC = pOldCell->GetBroadcaster();
+ bool bKeepBC = pBC && pBC->HasListeners();
+ if (eCellType == CELLTYPE_NOTE)
+ {
+ if (bKeepBC)
+ {
+ // We need to keep this "note" cell to keep the broadcaster.
+ pNoteCell = static_cast<ScNoteCell*>(pOldCell);
+ if (bDeleteNote)
+ pOldCell->DeleteNote();
+ }
+ }
+ else
{
// do not rescue note if it has to be deleted according to passed flags
ScPostIt* pNote = bDeleteNote ? 0 : pOldCell->ReleaseNote();
// #i99844# do not release broadcaster from old cell, it still has to notify deleted content
- SvtBroadcaster* pBC = pOldCell->GetBroadcaster();
- if( pNote || pBC )
+ if (pNote || bKeepBC)
pNoteCell = new ScNoteCell( pNote, pBC );
}
@@ -437,9 +449,12 @@ void ScColumn::DeleteRange( SCSIZE nStartIndex, SCSIZE nEndIndex, sal_uInt16 nDe
aHint.GetAddress().SetRow( nOldRow );
aHint.SetCell( pOldCell );
pDocument->Broadcast( aHint );
- // #i99844# after broadcasting, old cell has to forget the broadcaster (owned by pNoteCell)
- pOldCell->ReleaseBroadcaster();
- pOldCell->Delete();
+ if (pNoteCell != pOldCell)
+ {
+ // #i99844# after broadcasting, old cell has to forget the broadcaster (owned by pNoteCell)
+ pOldCell->ReleaseBroadcaster();
+ pOldCell->Delete();
+ }
}
}
else
commit ded70d46dceae53fed54888172a135cb2adc80de
Author: Eike Rathke <erack at redhat.com>
Date: Fri Jan 27 13:44:30 2012 +0100
Revert "fdo#44143: Keep cells with broadcasters alive during deletion."
This reverts commit af70bc00c6714eb8695babdf5af07416552f7034.
To be replaced by a better solution.
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 8bd0a45..73c0bbb 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -35,7 +35,6 @@
#include <sfx2/objsh.hxx>
#include <svl/zforlist.hxx>
#include <svl/zformat.hxx>
-#include <svl/broadcast.hxx>
#include "scitems.hxx"
#include "column.hxx"
@@ -415,12 +414,6 @@ 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 ccec280..32179e3 100644
--- a/sc/source/core/data/dpoutput.cxx
+++ b/sc/source/core/data/dpoutput.cxx
@@ -973,6 +973,11 @@ 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 );
More information about the Libreoffice-commits
mailing list