From e54a1a9761969ec0609ded9588a46a7ff40ca74e Mon Sep 17 00:00:00 2001
From: David Kastrup <dak@gnu.org>
Date: Sat, 26 Oct 2013 08:22:18 +0200
Subject: [PATCH] Issue 3633: Freeze measurePosition while Timing.timing is off

Also don't reset it in \cadenzaOff, and leave autoBeaming alone in
\cadenzaOn/\cadenzaOff.  This should cause quite fewer interferences
of cadenze with timing, accidentals, barlines and other stuff.
---
 lily/default-bar-line-engraver.cc |  8 +++++---
 lily/timing-translator.cc         | 18 +++++++++++-------
 ly/property-init.ly               | 12 ++----------
 3 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/lily/default-bar-line-engraver.cc b/lily/default-bar-line-engraver.cc
index 3b5555f581..a4c1bf6e2a 100644
--- a/lily/default-bar-line-engraver.cc
+++ b/lily/default-bar-line-engraver.cc
@@ -52,10 +52,11 @@ ADD_TRANSLATOR (Default_bar_line_engraver,
                 "defaultBarType "
                 "measureLength "
                 "whichBar "
-                "measurePosition ",
+                "measurePosition "
+                "timing ",
 
                 /* write */
-                "automaticBars "
+                ""
                );
 
 Default_bar_line_engraver::Default_bar_line_engraver ()
@@ -76,7 +77,8 @@ Default_bar_line_engraver::start_translation_timestep ()
 
   Moment mp = measure_position (context ());
   bool start_of_measure = (last_moment_.main_part_ != now.main_part_
-                           && !mp.main_part_);
+                           && !mp.main_part_
+                           && to_boolean (get_property ("timing")));
 
   if (!scm_is_string (which) && to_boolean (automatic_bars))
     {
diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc
index 03cbfdd3d4..fabc74c976 100644
--- a/lily/timing-translator.cc
+++ b/lily/timing-translator.cc
@@ -190,20 +190,24 @@ Timing_translator::start_translation_timestep ()
                                 measposp.smobbed_copy ());
     }
 
-  measposp += dt;
-
   int current_barnumber = robust_scm2int (get_property ("currentBarNumber"), 0);
   int internal_barnumber = robust_scm2int (get_property ("internalBarNumber"), 0);
 
   SCM cad = get_property ("timing");
   bool c = to_boolean (cad);
 
-  Rational len = measure_length ();
-  while (c && measposp.main_part_ >= len)
+  if (c)
     {
-      measposp.main_part_ -= len;
-      current_barnumber++;
-      internal_barnumber++;
+      Rational len = measure_length ();
+
+      measposp += dt;
+
+      while (measposp.main_part_ >= len)
+        {
+          measposp.main_part_ -= len;
+          current_barnumber++;
+          internal_barnumber++;
+        }
     }
 
   context ()->set_property ("currentBarNumber", scm_from_int (current_barnumber));
diff --git a/ly/property-init.ly b/ly/property-init.ly
index 5222b232d8..42a1d5100c 100644
--- a/ly/property-init.ly
+++ b/ly/property-init.ly
@@ -124,17 +124,9 @@ bassFigureStaffAlignmentNeutral =
 
 %% cadenzas
 
-cadenzaOn  = {
-  \set Timing.timing = ##f
-  \set Timing.autoBeaming = ##f
-}
-
-cadenzaOff = {
-  \set Timing.timing = ##t
-  \set Timing.measurePosition = #ZERO-MOMENT
-  \set Timing.autoBeaming = ##t
-}
+cadenzaOn  = \set Timing.timing = ##f
 
+cadenzaOff = \set Timing.timing = ##t
 
 %% chord names
 
-- 
2.39.5