X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo.C;h=8e5fcc334f9acb23e249bba86f12a1268faf09db;hb=414a11684e77aee713135ae65ec7438cfc4b162f;hp=1a854a192c23af5f132b204203b62139aeebb4b6;hpb=282f86fbb1ec7a877cdd05f25edbf468ae06595d;p=lyx.git diff --git a/src/undo.C b/src/undo.C index 1a854a192c..8e5fcc334f 100644 --- a/src/undo.C +++ b/src/undo.C @@ -48,6 +48,14 @@ std::ostream & operator<<(std::ostream & os, Undo const & undo) } +bool samePar(StableDocIterator const & i1, StableDocIterator const & i2) +{ + StableDocIterator tmpi2 = i2; + tmpi2.pos() = i1.pos(); + return i1 == tmpi2; +} + + void doRecordUndo(Undo::undo_kind kind, DocIterator const & cell, pit_type first_pit, pit_type last_pit, @@ -77,10 +85,10 @@ void doRecordUndo(Undo::undo_kind kind, if (!undo_finished && kind != Undo::ATOMIC && !stack.empty() - && stack.top().cell == undo.cell - && stack.top().kind == undo.kind - && stack.top().from == undo.from - && stack.top().end == undo.end) + && samePar(stack.top().cell, undo.cell) + && stack.top().kind == undo.kind + && stack.top().from == undo.from + && stack.top().end == undo.end) return; // fill in the real data to be saved @@ -93,10 +101,10 @@ void doRecordUndo(Undo::undo_kind kind, // record the relevant paragraphs LyXText const * text = cell.text(); BOOST_ASSERT(text); - ParagraphList & plist = text->paragraphs(); - ParagraphList::iterator first = plist.begin(); + ParagraphList const & plist = text->paragraphs(); + ParagraphList::const_iterator first = plist.begin(); advance(first, first_pit); - ParagraphList::iterator last = plist.begin(); + ParagraphList::const_iterator last = plist.begin(); advance(last, last_pit + 1); undo.pars = ParagraphList(first, last); } @@ -179,10 +187,10 @@ bool textUndoOrRedo(BufferView & bv, // this ugly stuff is needed until we get rid of the // inset_owner backpointer - ParagraphList::const_iterator pit = undo.pars.begin(); - ParagraphList::const_iterator end = undo.pars.end(); + ParagraphList::iterator pit = undo.pars.begin(); + ParagraphList::iterator const end = undo.pars.end(); for (; pit != end; ++pit) - const_cast(*pit).setInsetOwner(&dit.inset()); + pit->setInsetOwner(dit.realInset()); plist.insert(first, undo.pars.begin(), undo.pars.end()); }