From 3e7dee32edeb1cf3cd72be56cf021d3a64fc235c Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Mon, 11 Apr 2016 12:00:19 +0200 Subject: [PATCH] When a counter is stepped, reset recursively all slaves Fixes bug #10063. --- src/Counters.cpp | 22 ++++++++++----- src/Counters.h | 6 ++-- status.22x | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 status.22x diff --git a/src/Counters.cpp b/src/Counters.cpp index fe26040449..0b17aa1b9b 100644 --- a/src/Counters.cpp +++ b/src/Counters.cpp @@ -265,6 +265,19 @@ int Counters::value(docstring const & ctr) const } +void Counters::resetSlaves(docstring const & ctr) +{ + CounterList::iterator it = counterList_.begin(); + CounterList::iterator const end = counterList_.end(); + for (; it != end; ++it) { + if (it->second.master() == ctr) { + it->second.reset(); + resetSlaves(it->first); + } + } +} + + void Counters::step(docstring const & ctr, UpdateType utype) { CounterList::iterator it = counterList_.find(ctr); @@ -280,13 +293,8 @@ void Counters::step(docstring const & ctr, UpdateType utype) counter_stack_.pop_back(); counter_stack_.push_back(ctr); } - it = counterList_.begin(); - CounterList::iterator const end = counterList_.end(); - for (; it != end; ++it) { - if (it->second.master() == ctr) { - it->second.reset(); - } - } + + resetSlaves(ctr); } diff --git a/src/Counters.h b/src/Counters.h index ce122c4140..4ba0d00484 100644 --- a/src/Counters.h +++ b/src/Counters.h @@ -128,10 +128,10 @@ public: void addto(docstring const & ctr, int val); /// int value(docstring const & ctr) const; - /// Increment by one counter named by arg, and zeroes slave + /// Reset recursively all the counters that are slaves of the one named by \c ctr. + void resetSlaves(docstring const & ctr); + /// Increment by one counter named by \c ctr, and zeroes slave /// counter(s) for which it is the master. - /// Sub-slaves are not zeroed! That happens at slave's first - /// step 0->1. Seems to be sufficient. /// \param utype determines whether we track the counters. void step(docstring const & ctr, UpdateType utype); /// Reset all counters, and all the internal data structures diff --git a/status.22x b/status.22x new file mode 100644 index 0000000000..2331993b41 --- /dev/null +++ b/status.22x @@ -0,0 +1,71 @@ +-*- text -*- + +This file describes what has been done in the preparation of LyX 2.2.1. +All comments are welcome. + +We try to group things by topic and in decreasing order of importance. +Please feel free to re-arrange if that seems like a good idea. + +What's new +========== + +** Updates: +*********** + +* DOCUMENT INPUT/OUTPUT + + + +* TEX2LYX IMPROVEMENTS + + + +* USER INTERFACE + +* DOCUMENTATION AND LOCALIZATION + + + +* BUILD/INSTALLATION + + + + +** Bug fixes: +************* + +* DOCUMENT INPUT/OUTPUT + + + +* LYX2LYX + + + +* USER INTERFACE + +- When a counter is stepped, reset recursively all subcounters (bug #10063). + + +* INTERNALS + + + +* DOCUMENTATION AND LOCALIZATION + + + +* LYXHTML + + + +* TEX2LYX + + + +* ADVANCED FIND AND REPLACE + + + +* BUILD/INSTALLATION + -- 2.39.5