]> git.lyx.org Git - features.git/commitdiff
Place the cursor correctly after undoing an inset dissolution
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 20 May 2015 10:09:12 +0000 (12:09 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 20 May 2015 10:14:34 +0000 (12:14 +0200)
The cleanup in 11ca1406 was not correct. It is actually not possible to implement recordUndoInset from the undo API, since the cursor may not be at a different level than the text to be saved.

Fixes ticket #9553

src/Cursor.cpp
src/Undo.cpp
src/Undo.h

index 17ee74e9c1ab73dd53fbc1fad0e32b6e52f6afb6..44457e335febd772ace8f617ba4a1d8bca3df6ad 100644 (file)
@@ -2496,14 +2496,7 @@ void Cursor::recordUndo(UndoKind kind) const
 
 void Cursor::recordUndoInset(Inset const * in) const
 {
-       if (!in || in == &inset()) {
-               CursorData c = *this;
-               c.pop_back();
-               buffer()->undo().recordUndo(c, c.pit(), c.pit());
-       } else if (in == nextInset())
-               recordUndo();
-       else
-               LYXERR0("Inset not found, no undo element added.");
+       buffer()->undo().recordUndoInset(*this, in);
 }
 
 
index 95eb160d60c9c19494cf3646fac858b90964db48..1ab11d377467f76fa43c48a76799672bc7d79273 100644 (file)
@@ -587,6 +587,19 @@ void Undo::recordUndo(CursorData const & cur, pit_type from, pit_type to)
 }
 
 
+void Undo::recordUndoInset(CursorData const & cur, Inset const * inset)
+{
+       if (!inset || inset == &cur.inset()) {
+               DocIterator c = cur;
+               c.pop_back();
+               d->recordUndo(ATOMIC_UNDO, c, c.pit(), c.pit(), cur);
+       } else if (inset == cur.nextInset())
+               recordUndo(cur);
+       else
+               LYXERR0("Inset not found, no undo stack added.");
+}
+
+
 void Undo::recordUndoBufferParams(CursorData const & cur)
 {
        d->recordUndoBufferParams(cur);
index 789de5f39f69209dd6bae6cf8e0c51e47b035d94..95514ab0b259a1e5685a1cbe4362301b7cff4bc4 100644 (file)
@@ -102,6 +102,9 @@ public:
        /// paragraph or cell containing the cursor.
        void recordUndo(CursorData const & cur, UndoKind kind = ATOMIC_UNDO);
 
+       /// prepare undo for the inset containing the cursor
+       void recordUndoInset(CursorData const & cur, Inset const * inset);
+
        /// Convenience: record undo for buffer parameters
        void recordUndoBufferParams(CursorData const & cur);