X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo_funcs.C;h=e0b0e42117d517414b6e2151597628b46efd689d;hb=34d28f9daae536db06d6cf1a9dcf62dc0f5aa432;hp=2a8120d762f6bd8df3684dee1bbe0877a3f52321;hpb=03a76a07cecd59626a84c574e33c76b78bbe2f45;p=lyx.git diff --git a/src/undo_funcs.C b/src/undo_funcs.C index 2a8120d762..e0b0e42117 100644 --- a/src/undo_funcs.C +++ b/src/undo_funcs.C @@ -188,8 +188,10 @@ bool textHandleUndo(BufferView * bv, Undo * undo) tmppar3->previous(before); } else { // Do we really enter here ??? (Jug) - if (!before) + if (!before && behind) { bv->text->ownerParagraph(behind); + tmppar3 = behind; + } } if (tmppar4) { tmppar4->next(behind); @@ -211,29 +213,39 @@ bool textHandleUndo(BufferView * bv, Undo * undo) // calculate the endpar for redoing the paragraphs. if (behind) endpar = behind->next(); - + tmppar = bv->buffer()->getParFromID(undo->number_of_cursor_par); - UpdatableInset* it = static_cast(tmppar3->inInset()); + UpdatableInset* it = 0; + if (tmppar3) + it = static_cast(tmppar3->inInset()); if (it) { - it->getLyXText(bv)->redoParagraphs(bv, it->getLyXText(bv)->cursor, + it->getLyXText(bv)->redoParagraphs(bv, + it->getLyXText(bv)->cursor, endpar); LyXFont font; it->update(bv, font, false); - // we now would have to rebreak the whole paragraph the undo-par - // was in. How we do it here is not really true. We would have to - // save this information in the undo-struct and then we could do - // the right rebreak. Here we only handle the case where this - // was in the actual paragraph, which not always is true. + // we now would have to rebreak the whole paragraph the + // undo-par was in. How we do it here is not really true. + // We would have to save this information in the undo-struct + // and then we could do the right rebreak. Here we only + // handle the case where this was in the actual paragraph, + // which not always is true. bv->text->redoParagraphs(bv, bv->text->cursor, - bv->text->cursor.par()); + bv->text->cursor.par()); if (tmppar){ it = static_cast(tmppar->inInset()); - it->edit(bv); - it->getLyXText(bv)->setCursorIntern(bv, tmppar, undo->cursor_pos); - it->getLyXText(bv)->updateCounters(bv, it->getLyXText(bv)->cursor.row()); + LyXText * t; + if (it) { + it->edit(bv); + t = it->getLyXText(bv); + } else { + t = bv->text; + } + t->setCursorIntern(bv, tmppar, undo->cursor_pos); + t->updateCounters(bv, t->cursor.row()); } bv->text->setCursorIntern(bv, bv->text->cursor.par(), - bv->text->cursor.pos()); + bv->text->cursor.pos()); } else { bv->text->redoParagraphs(bv, bv->text->cursor, endpar); if (tmppar) { @@ -376,13 +388,19 @@ Undo * createUndo(BufferView * bv, Undo::undo_kind kind, while (tmppar != end && tmppar->next()) { tmppar = tmppar->next(); +#if 0 tmppar2->next(new Paragraph(*tmppar, true)); +#else + Paragraph * ptmp = new Paragraph(*tmppar, true); + tmppar2->next(ptmp); +#endif // a memory optimization: Just store the layout // information when only edit if (kind == Undo::EDIT) { tmppar2->clearContents(); } tmppar2->next()->previous(tmppar2); + tmppar2 = tmppar2->next(); } tmppar2->next(0);