]> git.lyx.org Git - features.git/commitdiff
Fix cursor position after redo
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 27 Apr 2016 19:16:34 +0000 (21:16 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Fri, 29 Apr 2016 16:00:53 +0000 (18:00 +0200)
When document settings are modified, a command
  inset-forall Branch inset-toggle asign
is run to open as needed all branches. At the end of the said loop,
the cursor is reset to where it was. However, the cur_after undo
element member is not set because it already had a value.

To make this work as expected, it is necessary in LFUN_INSET_FORALL to
reset the cursor before ending the undo group and to insert a dummy
recordUndo call.

Fixes bug #10097.

(cherry picked from commit 0036762f30def16ab8b2216f721f9e552893bc85)

src/BufferView.cpp

index 72b2bd4dcb392181f3ebd80605ff54afb31d6134..e5964a4492361d7cb6db0d2b6dea3af90a07b0be 100644 (file)
@@ -1850,9 +1850,17 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        if (!cur.nextInset() || cur.nextInset() == ins)
                                cur.forwardInset();
                }
-               cur.endUndoGroup();
                cur = savecur;
                cur.fixIfBroken();
+               /** This is a dummy undo record only to remember the cursor
+                * that has just been set; this will be used on a redo action
+                * (see ticket #10097)
+
+                * FIXME: a better fix would be to have a way to set the
+                * cursor value directly, but I am not sure it is worth it.
+                */
+               cur.recordUndo();
+               cur.endUndoGroup();
                dr.screenUpdate(Update::Force);
                dr.forceBufferUpdate();