diff --git a/src/Cursor.cpp b/src/Cursor.cpp index 7a13e1c3c9..be042940a0 100644 --- a/src/Cursor.cpp +++ b/src/Cursor.cpp @@ -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; } diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index ed77f71f85..87f7d4b4f5 100644 --- a/src/mathed/InsetMathGrid.cpp +++ b/src/mathed/InsetMathGrid.cpp @@ -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; } diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp index c2f4fc16ba..860d265e53 100644 --- a/src/mathed/InsetMathNest.cpp +++ b/src/mathed/InsetMathNest.cpp @@ -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; diff --git a/src/mathed/MathData.cpp b/src/mathed/MathData.cpp index 8fcf7466e3..a4a11bb136 100644 --- a/src/mathed/MathData.cpp +++ b/src/mathed/MathData.cpp @@ -28,8 +28,6 @@ #include "CoordCache.h" #include "Cursor.h" -#include "mathed/InsetMathUnknown.h" - #include "support/debug.h" #include "support/docstream.h"