From 0be5ae123c212f544ace41fa94a2149c0973595b Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Sun, 28 Jan 2018 23:33:45 -0500 Subject: [PATCH] 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 ++++++++ 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index ffe522e0f9..3fc2ea0e0a 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -2484,6 +2484,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 35e7632973..b1b8de2bb3 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -529,6 +529,8 @@ public: /// void makeCitationLabels() const; /// + void invalidateCiteLabels() const; + /// bool citeLabelsValid() const; /// void getLabelList(std::vector &) const; diff --git a/src/BufferView.cpp b/src/BufferView.cpp index e141f34c7e..68159b5676 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1357,25 +1357,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 c56e572572..aa9925109d 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 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. -- 2.39.5