From 5a9bf601668c1fcb43edb59b1672602a87ff10e2 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 ++++++++ status.23x | 3 +++ 5 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index b3ce87f900..4d9973a89c 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 0e01dbc286..048c875404 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 &) const; diff --git a/src/BufferView.cpp b/src/BufferView.cpp index f1b5c378b6..b1c995d471 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 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. diff --git a/status.23x b/status.23x index 55128e96f7..10e13fe8e6 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 -- 2.39.5