diff options
-rw-r--r-- | sw/source/core/unocore/unochart.cxx | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index 17b116aa5235..14484459e1ea 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -1583,6 +1583,7 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox { SwChartDataSequence *pDataSeq = 0; sal_Bool bNowEmpty = sal_False; + sal_Bool bSeqDisposed = sal_False; // check if weak reference is still valid... uno::Reference< chart2::data::XDataSequence > xTemp(*aIt); // temporary needed for g++ 3.3.5 @@ -1593,10 +1594,16 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox pDataSeq = static_cast< SwChartDataSequence * >( xRef.get() ); if (pDataSeq) { -#if OSL_DEBUG_LEVEL > 1 - OUString aRangeStr( pDataSeq->getSourceRangeRepresentation() ); -#endif - bNowEmpty = pDataSeq->DeleteBox( rBox ); + try + { + bNowEmpty = pDataSeq->DeleteBox( rBox ); + } + catch (const lang::DisposedException&) + { + bNowEmpty = sal_True; + bSeqDisposed = sal_True; + } + if (bNowEmpty) aDelIt = aIt; } @@ -1606,7 +1613,7 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox if (bNowEmpty) { rSet.erase( aDelIt ); - if (pDataSeq) + if (pDataSeq && !bSeqDisposed) pDataSeq->dispose(); // the current way to tell chart that sth. got removed } } @@ -2512,6 +2519,9 @@ void SAL_CALL SwChartDataSequence::removeEventListener( sal_Bool SwChartDataSequence::DeleteBox( const SwTableBox &rBox ) { + if (bDisposed) + throw lang::DisposedException(); + #if OSL_DEBUG_LEVEL > 1 String aBoxName( rBox.GetName() ); #endif |