summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.diff58
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();
++ }
+ }
+ }
+ }