commit 4356f2254af1a0ea5e4215e29881296452b1e8d9 Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Mon Apr 7 16:46:47 2014 +0200
Respect group integrity when removing stuff from the Undo stack. Fixes: #9079 diff --git a/src/Undo.cpp b/src/Undo.cpp index a335873..31eaec3 100644 --- a/src/Undo.cpp +++ b/src/Undo.cpp @@ -160,13 +160,17 @@ public: /// Push an item on to the stack, deleting the bottom group on /// overflow. void push(UndoElement const & v) { - c_.push_front(v); - if (c_.size() > limit_) { + // Remove some entries if the limit has been reached. + // However, if the only group on the stack is the one + // we are currently populating, do nothing. + if (c_.size() >= limit_ + && c_.front().group_id != v.group_id) { // remove a whole group at once. const size_t gid = c_.back().group_id; while (!c_.empty() && c_.back().group_id == gid) c_.pop_back(); } + c_.push_front(v); } /// Mark all the elements of the stack as dirty