commit 5a9bf601668c1fcb43edb59b1672602a87ff10e2
Author: Richard Heck <[email protected]>
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