]> 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)
committerRichard Heck <rgheck@lyx.org>
Sun, 29 May 2016 21:55:42 +0000 (17:55 -0400)
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.

src/BufferView.cpp

index c6c489f994abfe949478bae74c3ed8af53cd1dba..b2da99880a220dc0023cb9ba821fabb81b808e7d 100644 (file)
@@ -1855,9 +1855,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();