commit 5a9bf601668c1fcb43edb59b1672602a87ff10e2
Author: Richard Heck <rgh...@lyx.org>
Date:   Sun Jan 28 23:33:45 2018 -0500

    Fix bug #11055.
    
    See also https://marc.info/?l=lyx-devel&m=151709211602688&w=2.
    
    (cherry picked from commit d3ee87eea282ca6e8f0a78bc6a0e27b4f0942624)
---
 src/Buffer.cpp         |    5 +++++
 src/Buffer.h           |    2 ++
 src/BufferView.cpp     |   32 ++++++++++++++++++++++++++------
 src/LayoutModuleList.h |    8 ++++++++
 status.23x             |    3 +++
 5 files changed, 44 insertions(+), 6 deletions(-)

diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index b3ce87f..4d9973a 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -2467,6 +2467,11 @@ void Buffer::makeCitationLabels() const
 }
 
 
+void Buffer::invalidateCiteLabels() const
+{
+       masterBuffer()->d->cite_labels_valid_ = false;
+}
+
 bool Buffer::citeLabelsValid() const
 {
        return masterBuffer()->d->cite_labels_valid_;
diff --git a/src/Buffer.h b/src/Buffer.h
index 0e01dbc..048c875 100644
--- a/src/Buffer.h
+++ b/src/Buffer.h
@@ -519,6 +519,8 @@ public:
        ///
        void makeCitationLabels() const;
        ///
+       void invalidateCiteLabels() const;
+       ///
        bool citeLabelsValid() const;
        ///
        void getLabelList(std::vector<docstring> &) const;
diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index f1b5c37..b1c995d 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -1367,25 +1367,45 @@ void BufferView::dispatch(FuncRequest const & cmd, 
DispatchResult & dr)
                break;
        }
 
-       case LFUN_UNDO:
+       case LFUN_UNDO: {
                dr.setMessage(_("Undo"));
                cur.clearSelection();
+               // We need to find out if the bibliography information
+               // has changed. See bug #11055.
+               // So these should not be references...
+               LayoutModuleList const engines = buffer().params().citeEngine();
+               CiteEngineType const enginetype = 
buffer().params().citeEngineType();
                if (!cur.textUndo())
                        dr.setMessage(_("No further undo information"));
-               else
+               else {
                        dr.screenUpdate(Update::Force | Update::FitCursor);
-               dr.forceBufferUpdate();
+                       dr.forceBufferUpdate();
+                       if (buffer().params().citeEngine() != engines ||
+                           buffer().params().citeEngineType() != enginetype)
+                               buffer().invalidateCiteLabels();
+               }
                break;
+       }
 
-       case LFUN_REDO:
+       case LFUN_REDO: {
                dr.setMessage(_("Redo"));
                cur.clearSelection();
+               // We need to find out if the bibliography information
+               // has changed. See bug #11055.
+               // So these should not be references...
+               LayoutModuleList const engines = buffer().params().citeEngine();
+               CiteEngineType const enginetype = 
buffer().params().citeEngineType();
                if (!cur.textRedo())
                        dr.setMessage(_("No further redo information"));
-               else
+               else {
                        dr.screenUpdate(Update::Force | Update::FitCursor);
-               dr.forceBufferUpdate();
+                       dr.forceBufferUpdate();
+                       if (buffer().params().citeEngine() != engines ||
+                           buffer().params().citeEngineType() != enginetype)
+                               buffer().invalidateCiteLabels();
+               }
                break;
+       }
 
        case LFUN_FONT_STATE:
                dr.setMessage(cur.currentState(false));
diff --git a/src/LayoutModuleList.h b/src/LayoutModuleList.h
index c56e572..aa99251 100644
--- a/src/LayoutModuleList.h
+++ b/src/LayoutModuleList.h
@@ -75,6 +75,14 @@ public:
        /// to be made.
        bool adaptToBaseClass(LayoutFile const * const lay,
                        std::list<std::string> const & removedModules);
+       ///
+       bool operator==(LayoutModuleList const & other) const {
+               return lml_ == other.lml_;
+       }
+       ///
+       bool operator!=(LayoutModuleList const & other) const {
+               return !operator==(other);
+       }
 private:
        /// Removes modules excluded by, provided by, etc, the base class.
        /// \param lay The document class against which to check.
diff --git a/status.23x b/status.23x
index 55128e9..10e13fe 100644
--- a/status.23x
+++ b/status.23x
@@ -196,6 +196,9 @@ What's new
 
 - Fix some master/child issues with biblatex (bug 11083).
 
+- Recalculate citation insets when bibliography info changes as a result
+  of undo or redo (bug 11005).
+
 
 * INTERNALS
 

Reply via email to