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

Reply via email to