Fix undo of entering \hline

It was broken with 6d75800f5d as noticed by Enrico. The fix is to use undo
groups (thanks Jean-Marc).
This commit is contained in:
Georg Baum 2012-04-08 19:15:49 +02:00
parent 7c5f28ad26
commit 1fa39e1f95
4 changed files with 19 additions and 6 deletions

View File

@ -1599,8 +1599,11 @@ bool Cursor::macroModeClose()
docstring const name = s.substr(1);
InsetMathNest * const in = inset().asInsetMath()->asNestInset();
if (in && in->interpretString(*this, s))
if (in && in->interpretString(*this, s)) {
// end undo group that was opened before in was created
endUndoGroup();
return true;
}
MathAtom atom = buffer()->getMacro(name, *this, false) ?
MathAtom(new MathMacro(buffer(), name)) : createInsetMath(name, buffer());
@ -1633,7 +1636,9 @@ bool Cursor::macroModeClose()
else
insert(selection);
}
// end undo group that was opened before in was created
endUndoGroup();
return true;
}

View File

@ -184,6 +184,7 @@ bool InsetMathGrid::interpretString(Cursor & cur, docstring const & str)
FuncStatus status;
if (getStatus(cur, fr, status)) {
if (status.enabled()) {
cur.recordUndoInset();
rowinfo_[cur.row()].lines_++;
return true;
}

View File

@ -848,10 +848,14 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
case LFUN_SELF_INSERT:
if (cmd.argument().size() != 1) {
// use a group because interpretString() might
// record an extra undo step
cur.beginUndoGroup();
cur.recordUndoSelection();
docstring const arg = cmd.argument();
if (!interpretString(cur, arg))
cur.insert(arg);
cur.endUndoGroup();
break;
}
// Don't record undo steps if we are in macro mode and thus
@ -1663,6 +1667,8 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
cur.cell().erase(cur.pos());
cur.plainInsert(MathAtom(
new InsetMathBig(name.substr(1), delim)));
// end undo group that was opened before p was created
cur.endUndoGroup();
return true;
}
}
@ -1706,9 +1712,12 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
bool reduced = cap::reduceSelectionToOneCell(cur);
if (reduced || !cur.selection()) {
docstring const safe = cap::grabAndEraseSelection(cur);
if (!cur.inRegexped())
if (!cur.inRegexped()) {
// open a group because interpretString() might
// record an extra undo step when finalizing
cur.beginUndoGroup();
cur.insert(MathAtom(new InsetMathUnknown(from_ascii("\\"), safe, false)));
else
} else
cur.niceInsert(createInsetMath("backslash", buf));
}
return true;

View File

@ -28,8 +28,6 @@
#include "CoordCache.h"
#include "Cursor.h"
#include "mathed/InsetMathUnknown.h"
#include "support/debug.h"
#include "support/docstream.h"