From: Richard Heck Date: Mon, 29 Jan 2018 04:33:45 +0000 (-0500) Subject: Fix bug #11055. X-Git-Tag: lyx-2.4.0dev-acb2ca7b~3954 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=d3ee87eea282ca6e8f0a78bc6a0e27b4f0942624;p=features.git Fix bug #11055. See also https://marc.info/?l=lyx-devel&m=151709211602688&w=2. --- diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 9442f23756..ff85f2232c 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -2440,6 +2440,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 96fd8e25f8..d111c2ba3d 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -517,6 +517,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 b64f36d8ab..7659f03cc2 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1379,25 +1379,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.