commit 8f8e8ed43ce8eafa325dd98c1572c53aa3702ca3 Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Mon Mar 3 18:24:51 2014 +0100
Fix bug #8998: changed document setting is recoded twice as undo The general trick to avoid this kind of problems is to use undo groups. diff --git a/src/frontends/qt4/GuiDocument.cpp b/src/frontends/qt4/GuiDocument.cpp index 1ac9259..caa3d22 100644 --- a/src/frontends/qt4/GuiDocument.cpp +++ b/src/frontends/qt4/GuiDocument.cpp @@ -50,6 +50,7 @@ #include "qt_helpers.h" #include "Spacing.h" #include "TextClass.h" +#include "Undo.h" #include "insets/InsetListingsParams.h" @@ -3679,6 +3680,11 @@ static void dispatch_bufferparams(Dialog const & dialog, void GuiDocument::dispatchParams() { + // We need a non-const buffer object. + Buffer & buf = const_cast<BufferView *>(bufferview())->buffer(); + // There may be several undo records; group them (bug #8998) + buf.undo().beginUndoGroup(); + // This must come first so that a language change is correctly noticed setLanguage(); @@ -3748,6 +3754,10 @@ void GuiDocument::dispatchParams() // If we used an LFUN, we would not need these two lines: BufferView * bv = const_cast<BufferView *>(bufferview()); bv->processUpdateFlags(Update::Force | Update::FitCursor); + + // Don't forget to close the group. Note that it is important + // to check that there is no early return in the method. + buf.undo().endUndoGroup(); }