]> git.lyx.org Git - features.git/commitdiff
Fix bug #11055.
authorRichard Heck <rgheck@lyx.org>
Mon, 29 Jan 2018 04:33:45 +0000 (23:33 -0500)
committerRichard Heck <rgheck@lyx.org>
Mon, 29 Jan 2018 04:46:39 +0000 (23:46 -0500)
See also https://marc.info/?l=lyx-devel&m=151709211602688&w=2.

(cherry picked from commit d3ee87eea282ca6e8f0a78bc6a0e27b4f0942624)

src/Buffer.cpp
src/Buffer.h
src/BufferView.cpp
src/LayoutModuleList.h

index ffe522e0f9845a7838526037969df4aedc4856bf..3fc2ea0e0a3784e3c269242e0fcb92cb2a36e2fa 100644 (file)
@@ -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_;
index 35e76329733b9765ba1b522a47606c34ab8d4a4b..b1b8de2bb36d270e73e1c8007edc3172b23c2c77 100644 (file)
@@ -529,6 +529,8 @@ public:
        ///
        void makeCitationLabels() const;
        ///
+       void invalidateCiteLabels() const;
+       ///
        bool citeLabelsValid() const;
        ///
        void getLabelList(std::vector<docstring> &) const;
index e141f34c7ec3784864a547f0014b7e0384b45463..68159b56764e6df619e5e57f981d68bce6c9cde1 100644 (file)
@@ -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));
index c56e5725725225890c596ab4e069ec6758894127..aa9925109d9c6ab25979d60e1bab419df79fd001 100644 (file)
@@ -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.