sc/inc/listenercontext.hxx | 3 +++ sc/source/core/data/column2.cxx | 13 +++++++++++-- sc/source/core/data/listenercontext.cxx | 7 ++++++- 3 files changed, 20 insertions(+), 3 deletions(-)
New commits: commit 822f0ad64aaff65737bf10189642538f2dd81225 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Mon May 20 12:25:19 2013 -0400 Do the same trick when getting broadcasters during mass formula cell deletion. Change-Id: Iee1b3ff637d10c6bd2d2342db518a2fc986327b7 diff --git a/sc/inc/listenercontext.hxx b/sc/inc/listenercontext.hxx index 2503e72..f4fbb0f 100644 --- a/sc/inc/listenercontext.hxx +++ b/sc/inc/listenercontext.hxx @@ -35,10 +35,13 @@ class EndListeningContext : boost::noncopyable { ScDocument& mrDoc; ColumnSpanSet maSet; + ColumnBlockPositionSet maPosSet; public: EndListeningContext(ScDocument& rDoc); ScDocument& getDoc(); + ColumnBlockPosition* getBlockPosition(SCTAB nTab, SCCOL nCol); + void addEmptyBroadcasterPosition(SCTAB nTab, SCCOL nCol, SCROW nRow); void purgeEmptyBroadcasters(); }; diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index eeb5519..324519a 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -2107,10 +2107,19 @@ void ScColumn::StartListening( sc::StartListeningContext& rCxt, SCROW nRow, SvtL void ScColumn::EndListening( sc::EndListeningContext& rCxt, SCROW nRow, SvtListener& rListener ) { - SvtBroadcaster* pBC = GetBroadcaster(nRow); - if (!pBC) + sc::ColumnBlockPosition* p = rCxt.getBlockPosition(nTab, nCol); + if (!p) + return; + + sc::BroadcasterStoreType::iterator& it = p->miBroadcasterPos; + std::pair<sc::BroadcasterStoreType::iterator,size_t> aPos = maBroadcasters.position(it, nRow); + it = aPos.first; // store the block position for next iteration. + if (it->type != sc::element_type_broadcaster) return; + SvtBroadcaster* pBC = sc::custom_broadcaster_block::at(*it->data, aPos.second); + OSL_ASSERT(pBC); + rListener.EndListening(*pBC); if (!pBC->HasListeners()) // There is no more listeners for this cell. Add it to the purge list for later purging. diff --git a/sc/source/core/data/listenercontext.cxx b/sc/source/core/data/listenercontext.cxx index 7ab3799..f53f1bc 100644 --- a/sc/source/core/data/listenercontext.cxx +++ b/sc/source/core/data/listenercontext.cxx @@ -40,13 +40,18 @@ ColumnBlockPosition* StartListeningContext::getBlockPosition(SCTAB nTab, SCCOL n return maSet.getBlockPosition(nTab, nCol); } -EndListeningContext::EndListeningContext(ScDocument& rDoc) : mrDoc(rDoc) {} +EndListeningContext::EndListeningContext(ScDocument& rDoc) : mrDoc(rDoc), maPosSet(rDoc) {} ScDocument& EndListeningContext::getDoc() { return mrDoc; } +ColumnBlockPosition* EndListeningContext::getBlockPosition(SCTAB nTab, SCCOL nCol) +{ + return maPosSet.getBlockPosition(nTab, nCol); +} + void EndListeningContext::addEmptyBroadcasterPosition(SCTAB nTab, SCCOL nCol, SCROW nRow) { maSet.set(nTab, nCol, nRow, true); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits