#include "Undo.h"
#include "Buffer.h"
+#include "BufferList.h"
#include "BufferParams.h"
#include "buffer_funcs.h"
#include "Cursor.h"
//LYXERR0("undo.array: " << *undo.array);
LBUFERR(undo.array);
dit.cell().swap(*undo.array);
+ dit.inset().setBuffer(buffer_);
delete undo.array;
undo.array = 0;
} else {
if (d->group_level_ == 0) {
// create a new group
++d->group_id_;
- LYXERR(Debug::UNDO, "+++++++Creating new group " << d->group_id_);
+ LYXERR(Debug::UNDO, "+++++++ Creating new group " << d->group_id_
+ << " for buffer " << &d->buffer_);
}
++d->group_level_;
}
if (d->group_level_ == 0) {
// real end of the group
d->group_cur_before_ = CursorData();
- LYXERR(Debug::UNDO, "-------End of group " << d->group_id_);
+ LYXERR(Debug::UNDO, "------- End of group " << d->group_id_
+ << " of buffer " << &d->buffer_);
}
}
}
+bool Undo::activeUndoGroup() const
+{
+ return d->group_level_ > 0
+ && !d->undostack_.empty()
+ && d->undostack_.top().group_id == d->group_id_;
+}
+
+
void Undo::recordUndo(CursorData const & cur, UndoKind kind)
{
d->recordUndo(kind, cur, cur.pit(), cur.pit(), cur);
UndoGroupHelper::~UndoGroupHelper()
{
for (Buffer * buf : d->buffers_)
- buf->undo().endUndoGroup();
+ if (theBufferList().isLoaded(buf) || theBufferList().isInternal(buf))
+ buf->undo().endUndoGroup();
delete d;
}