]> git.lyx.org Git - features.git/blobdiff - src/Undo.cpp
The way this was done here is inconsistent with how it is done
[features.git] / src / Undo.cpp
index 95eb160d60c9c19494cf3646fac858b90964db48..7a1c6fdf574474119e403ad72071da4c333c42ce 100644 (file)
@@ -434,10 +434,12 @@ void Undo::Private::doTextUndoOrRedo(CursorData & cur, UndoElementStack & stack,
 
        if (undo.bparams)
                doRecordUndoBufferParams(undo.cur_after, otherstack);
-       else
+       else {
+               LATTEST(undo.end <= cell_dit.lastpit());
                doRecordUndo(ATOMIC_UNDO, cell_dit,
                                         undo.from, cell_dit.lastpit() - undo.end, undo.cur_after,
                                         otherstack);
+       }
        otherstack.top().cur_after = undo.cur_before;
 
        // This does the actual undo/redo.
@@ -587,6 +589,19 @@ void Undo::recordUndo(CursorData const & cur, pit_type from, pit_type to)
 }
 
 
+void Undo::recordUndoInset(CursorData const & cur, Inset const * inset)
+{
+       if (!inset || inset == &cur.inset()) {
+               DocIterator c = cur;
+               c.pop_back();
+               d->recordUndo(ATOMIC_UNDO, c, c.pit(), c.pit(), cur);
+       } else if (inset == cur.nextInset())
+               recordUndo(cur);
+       else
+               LYXERR0("Inset not found, no undo stack added.");
+}
+
+
 void Undo::recordUndoBufferParams(CursorData const & cur)
 {
        d->recordUndoBufferParams(cur);
@@ -604,5 +619,18 @@ void Undo::recordUndoFullBuffer(CursorData const & cur)
        endUndoGroup();
 }
 
+/// UndoGroupHelper class stuff
+
+void UndoGroupHelper::resetBuffer(Buffer * buf)
+{
+       if (buf == buffer_)
+               return;
+       if (buffer_)
+               buffer_->undo().endUndoGroup();
+       buffer_ = buf;
+       if (buffer_)
+               buffer_->undo().beginUndoGroup();
+}
+
 
 } // namespace lyx