commit fe5e117038788c7eeca8b10562eff108c26af4b0
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Wed Apr 27 21:16:34 2016 +0200
Fix cursor position after redo
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)
diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 72b2bd4..e5964a4 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -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();