commit e340f46476000b933693772a5f3ce9d204504a0b
Author: Jean-Marc Lasgouttes <[email protected]>
Date:   Sun Jan 12 22:18:36 2020 +0100

    Fixup bf7f4d71: Let changeRefsIfUnique handle undo
    
    This allows for a much lower memory consumption than a plain
    recordUnfoFullBuffer.
    
    Related to bug 6494.
---
 src/Buffer.cpp              |    5 ++++-
 src/Buffer.h                |    2 +-
 src/insets/InsetBibitem.cpp |    2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index bd3d63e..ffdd9b8 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -4039,14 +4039,17 @@ void Buffer::changeRefsIfUnique(docstring const & from, 
docstring const & to)
                return;
 
        string const paramName = "key";
+       UndoGroupHelper ugh(this);
        InsetIterator it = inset_iterator_begin(inset());
        for (; it; ++it) {
                if (it->lyxCode() != CITE_CODE)
                        continue;
                InsetCommand * inset = it->asInsetCommand();
                docstring const oldValue = inset->getParam(paramName);
-               if (oldValue == from)
+               if (oldValue == from) {
+                       undo().recordUndo(CursorData(it));
                        inset->setParam(paramName, to);
+               }
        }
 }
 
diff --git a/src/Buffer.h b/src/Buffer.h
index 0e1ec6b..04e9d60 100644
--- a/src/Buffer.h
+++ b/src/Buffer.h
@@ -624,7 +624,7 @@ public:
        mutable UserMacroSet usermacros;
 
        /// Replace the inset contents for insets which InsetCode is equal
-       /// to the passed \p inset_code.
+       /// to the passed \p inset_code. Handles undo.
        void changeRefsIfUnique(docstring const & from, docstring const & to);
 
        /// get source code (latex/docbook) for some paragraphs, or all 
paragraphs
diff --git a/src/insets/InsetBibitem.cpp b/src/insets/InsetBibitem.cpp
index 424755b..1c1962c 100644
--- a/src/insets/InsetBibitem.cpp
+++ b/src/insets/InsetBibitem.cpp
@@ -155,7 +155,7 @@ void InsetBibitem::doDispatch(Cursor & cur, FuncRequest & 
cmd)
                setParam("literal", p["literal"]);
 
                if (p["key"] != old_key) {
-                       cur.recordUndoFullBuffer();
+                       // changeRefsIfUnique handles undo
                        cur.bv().buffer().changeRefsIfUnique(old_key, p["key"]);
                        updateCommand(p["key"]);
                        cur.forceBufferUpdate();
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to