Kaydet (Commit) 2c737ced authored tarafından Jürgen Schmidt's avatar Jürgen Schmidt Kaydeden (comit) Caolán McNamara

Resolves: #i119912# Crash when redo split pasted table used by chart

fix: While deleting any box from chart data provider, verify whether there are
any invalidate chart data sequence inside, if so, catch the exception and
remove it.

Patch By: Peng Chen
Found By: yanji
Review By: jsc

(cherry picked from commit a92e3539)

Change-Id: I239824e92d13e42b83674dbdeaeef053f1e6ea9a
üst ac8461c6
...@@ -1583,6 +1583,7 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox ...@@ -1583,6 +1583,7 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox
{ {
SwChartDataSequence *pDataSeq = 0; SwChartDataSequence *pDataSeq = 0;
sal_Bool bNowEmpty = sal_False; sal_Bool bNowEmpty = sal_False;
sal_Bool bSeqDisposed = sal_False;
// check if weak reference is still valid... // check if weak reference is still valid...
uno::Reference< chart2::data::XDataSequence > xTemp(*aIt); // temporary needed for g++ 3.3.5 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 ...@@ -1593,10 +1594,16 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox
pDataSeq = static_cast< SwChartDataSequence * >( xRef.get() ); pDataSeq = static_cast< SwChartDataSequence * >( xRef.get() );
if (pDataSeq) if (pDataSeq)
{ {
#if OSL_DEBUG_LEVEL > 1 try
OUString aRangeStr( pDataSeq->getSourceRangeRepresentation() ); {
#endif bNowEmpty = pDataSeq->DeleteBox( rBox );
bNowEmpty = pDataSeq->DeleteBox( rBox ); }
catch (const lang::DisposedException&)
{
bNowEmpty = sal_True;
bSeqDisposed = sal_True;
}
if (bNowEmpty) if (bNowEmpty)
aDelIt = aIt; aDelIt = aIt;
} }
...@@ -1606,7 +1613,7 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox ...@@ -1606,7 +1613,7 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox
if (bNowEmpty) if (bNowEmpty)
{ {
rSet.erase( aDelIt ); rSet.erase( aDelIt );
if (pDataSeq) if (pDataSeq && !bSeqDisposed)
pDataSeq->dispose(); // the current way to tell chart that sth. got removed pDataSeq->dispose(); // the current way to tell chart that sth. got removed
} }
} }
...@@ -2512,6 +2519,9 @@ void SAL_CALL SwChartDataSequence::removeEventListener( ...@@ -2512,6 +2519,9 @@ void SAL_CALL SwChartDataSequence::removeEventListener(
sal_Bool SwChartDataSequence::DeleteBox( const SwTableBox &rBox ) sal_Bool SwChartDataSequence::DeleteBox( const SwTableBox &rBox )
{ {
if (bDisposed)
throw lang::DisposedException();
#if OSL_DEBUG_LEVEL > 1 #if OSL_DEBUG_LEVEL > 1
String aBoxName( rBox.GetName() ); String aBoxName( rBox.GetName() );
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment