diff options
Diffstat (limited to 'app-office/koffice/files/koffice-1.2-kspread_cell.diff')
-rw-r--r-- | app-office/koffice/files/koffice-1.2-kspread_cell.diff | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/app-office/koffice/files/koffice-1.2-kspread_cell.diff b/app-office/koffice/files/koffice-1.2-kspread_cell.diff new file mode 100644 index 000000000000..4e05a17d3c1a --- /dev/null +++ b/app-office/koffice/files/koffice-1.2-kspread_cell.diff @@ -0,0 +1,58 @@ +Index: kspread_cell.cc +=================================================================== +RCS file: /home/kde/koffice/kspread/kspread_cell.cc,v +retrieving revision 1.447.2.1 +diff -u -r1.447.2.1 kspread_cell.cc +--- kspread/kspread_cell.cc 2002/09/04 06:59:13 1.447.2.1 ++++ kspread/kspread_cell.cc 2002/10/21 18:31:51 +@@ -1931,20 +1931,40 @@ + while already drawing the obscuring cell -- don't want to cause an + infinite loop + */ +- // Determine the dimension of the cell. ++ ++ /* ++ Store the obscuringCells list in a list of QPoint(column, row) ++ This avoids crashes during the iteration through obscuringCells, ++ when the cells may get non valid or the list itself gets changed ++ during a call of obscuringCell->paintCell (this happens e.g. when ++ there is an updateDepend) ++ */ ++ QValueList<QPoint> listPoints; + QValueList<KSpreadCell*>::iterator it = m_ObscuringCells.begin(); + QValueList<KSpreadCell*>::iterator end = m_ObscuringCells.end(); +- for ( ; it != end; ++it ) { ++ for ( ; it != end; ++it ) ++ { + KSpreadCell *obscuringCell = *it; +- QPoint obscuringCellRef( obscuringCell->column(), obscuringCell->row() ); +- double x = m_pTable->dblColumnPos( obscuringCell->column() ); +- double y = m_pTable->dblRowPos( obscuringCell->row() ); +- QPair<double,double> corner = qMakePair( x, y ); +- painter.save(); ++ listPoints.append( QPoint( obscuringCell->column(), obscuringCell->row() ) ); ++ } ++ ++ QValueList<QPoint>::iterator it1 = listPoints.begin(); ++ QValueList<QPoint>::iterator end1 = listPoints.end(); ++ for ( ; it1 != end1; ++it1 ) ++ { ++ QPoint obscuringCellRef = *it1; ++ KSpreadCell *obscuringCell = m_pTable->cellAt( obscuringCellRef.x(), obscuringCellRef.y() ); ++ if( obscuringCell != 0 ) ++ { ++ double x = m_pTable->dblColumnPos( obscuringCellRef.x() ); ++ double y = m_pTable->dblRowPos( obscuringCellRef.y() ); ++ QPair<double,double> corner = qMakePair( x, y ); ++ painter.save(); + +- obscuringCell->paintCell( rect, painter, view, +- corner, obscuringCellRef ); +- painter.restore(); ++ obscuringCell->paintCell( rect, painter, view, ++ corner, obscuringCellRef ); ++ painter.restore(); ++ } + } + } + } |