]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix 619.
authorJoe Neeman <joeneeman@gmail.com>
Sun, 18 May 2008 01:06:24 +0000 (11:06 +1000)
committerJoe Neeman <joeneeman@gmail.com>
Sun, 18 May 2008 01:06:24 +0000 (11:06 +1000)
Ensure that the sorting function used to find the
outside-staff-priority grobs doesn't modify its arguments.

lily/axis-group-interface.cc

index 044a392851df4ee626f48e6852b655e6762cd4a3..efed220b256c72639d9cd14538fc94686a61fa32 100644 (file)
@@ -579,6 +579,15 @@ add_grobs_of_one_priority (Skyline_pair *const skylines,
 Skyline_pair
 Axis_group_interface::skyline_spacing (Grob *me, vector<Grob*> elements)
 {
+  /* For grobs with an outside-staff-priority, the sorting function might
+     call extent and cause suicide. This breaks the contract that is required
+     for the STL sort function. To avoid this, we make sure that any suicides
+     are triggered beforehand.
+  */
+  for (vsize i = 0; i < elements.size (); i++)
+    if (scm_is_number (elements[i]->get_property ("outside-staff-priority")))
+      elements[i]->extent (elements[i], X_AXIS);
+
   vector_sort (elements, staff_priority_less);
   Grob *x_common = common_refpoint_of_array (elements, me, X_AXIS);
   Grob *y_common = common_refpoint_of_array (elements, me, Y_AXIS);