From: Allan Rae Date: Wed, 16 Jan 2002 12:57:26 +0000 (+0000) Subject: bug #174 now fixed X-Git-Tag: 1.6.10~20004 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=6fb6cd8cc4ef40e9c229b9aa6f0025ba1ae45938;p=features.git bug #174 now fixed git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3389 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/ChangeLog b/src/ChangeLog index 1a76fb8b03..0c21e29c5e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2002-01-16 Allan Rae + + * text2.C (removeRow): refresh_row needs a valid row. Or does it? + Can someone check this please? + + * text.C (drawInset): It was possible that p.row would be removed by + breakAgainOneRow upsetting a few other settings. There may be another + small tweak possible by setting need_break_row = 0 when p.row has been + removed but I don't know enough about the logic here. + 2002-01-15 Allan Rae * text.C (insertChar): removed conditional truism. diff --git a/src/text.C b/src/text.C index 75d1156d71..e74f249c78 100644 --- a/src/text.C +++ b/src/text.C @@ -485,9 +485,19 @@ void LyXText::drawInset(DrawRowParams & p, pos_type const pos) Row * prev = p.row->previous(); if (prev && prev->par() == p.row->par()) { breakAgainOneRow(p.bv, prev); - } + // breakAgainOneRow() may have removed p.row + // What about the x and y coordinates? par & pos ok. + if (prev->next() != p.row) { + p.row = prev; + } + // If there's only one row (after p.row was deleted) + // prev->next() == 0 and no breaking is required. + // Otherwise, check the new next row. + need_break_row = prev->next(); + } else { + need_break_row = p.row; + } setCursor(p.bv, cursor.par(), cursor.pos()); - need_break_row = p.row; } } diff --git a/src/text2.C b/src/text2.C index 3867ffa8c0..5f07c509d6 100644 --- a/src/text2.C +++ b/src/text2.C @@ -389,17 +389,23 @@ void LyXText::insertRow(Row * row, Paragraph * par, // removes the row and reset the touched counters void LyXText::removeRow(Row * row) const { + Row * row_prev = row->previous(); if (row->next()) - row->next()->previous(row->previous()); - if (!row->previous()) { + row->next()->previous(row_prev); + if (!row_prev) { firstrow = row->next(); // lyx::Assert(firstrow); } else { - row->previous()->next(row->next()); + row_prev->next(row->next()); } - if (row == lastrow) - lastrow = row->previous(); - + if (row == lastrow) { + lyx::Assert(!row->next()); + lastrow = row_prev; + } + if (refresh_row == row) { + refresh_row = row_prev ? row_prev : row->next(); + } + height -= row->height(); // the text becomes smaller delete row;