I've just checked in a fix.

Two fixes actually, and one of them I'd have thought we'd hit by now.

LyXText::deleteRow() forgot to check refresh_row.  I set this to:
        refresh_row = row_prev ? row_prev : row->next();

since I figure there must be some reason why refresh_row was set and
it would be unlikely that we'd delete the first row of a multirow
paragraph.

Anyway the interesting part is in LyXText::drawInset() where we got
partly screwed because p.row just got deleted so I changed it to a
valid row -- what else could I do?  Should I also try to fix the p.x
and p.y values?  Seems to work without doing that.

If someone more familiar with rebreaking could take a look and decide
whether I should/could set need_break_row differently if p.row was
just removed:

                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;
                }

If p.row was deleted it must have been the last row of a paragraph so
we could set need_break_row = 0 couldn't we?  As in:

                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;
                                need_break_row = 0;
                        } else {
                                need_break_row = p.row;
                        }
                } else {
                        need_break_row = p.row;
                }

Allan. (ARRae)

Reply via email to