]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 5080/2: pin measurePosition grace timing in alternatives
authorDavid Kastrup <dak@gnu.org>
Fri, 3 Mar 2017 16:57:36 +0000 (17:57 +0100)
committerDavid Kastrup <dak@gnu.org>
Fri, 10 Mar 2017 09:36:50 +0000 (10:36 +0100)
lily/volta-repeat-iterator.cc

index d12660579519601dfb43aff0a1ebd31be75b3478..8f9dca3b0b9451043c893f7e9203ce4d8bf442b7 100644 (file)
@@ -137,9 +137,27 @@ Volta_repeat_iterator::next_element (bool side_effect)
 
                   if (to_boolean (get_outlet ()->get_property ("timing")))
                     {
+                      SCM mps = ly_symbol2scm ("measurePosition");
                       for (SCM p = alt_restores_; scm_is_pair (p); p = scm_cdr (p))
-                        scm_apply_0 (Lily::ly_context_set_property_x,
-                                     scm_car (p));
+                        {
+                          SCM ls = scm_car (p);
+                          if (scm_is_eq (scm_cadr (ls), mps))
+                            // Repeats may have different grace timing, so
+                            // we need to adjust the measurePosition grace
+                            // timing to that of the current alternative
+                            // rather than that of the first.  The
+                            // Timing_translator does this already but is
+                            // too late to avoid bad side-effects
+                            {
+                              Moment mp (unsmob<Moment> (scm_caddr (ls))->main_part_,
+                                         get_outlet ()->now_mom ().grace_part_);
+                              Lily::ly_context_set_property_x (scm_car (ls),
+                                                               mps,
+                                                               mp.smobbed_copy ());
+                            }
+                          else
+                            scm_apply_0 (Lily::ly_context_set_property_x, ls);
+                        }
                     }
                 }
             }