Hello,

Attached is a patch which fixes issue 463, together with a regression test.

Regards,
Neil

<<attachment: set-followVoice.png>>

From a684cb8c12ae5ad35b1e08b05fee2f23617f3963 Mon Sep 17 00:00:00 2001
From: Neil Puttock <[EMAIL PROTECTED]>
Date: Fri, 16 May 2008 22:57:42 +0100
Subject: [PATCH] Fix issue 463 followVoice switching problem

---
 input/regression/follow-voice-consecutive.ly |   23 +++++++++++++++++++++++
 lily/note-head-line-engraver.cc              |   23 +++++++++++------------
 2 files changed, 34 insertions(+), 12 deletions(-)
 create mode 100644 input/regression/follow-voice-consecutive.ly

diff --git a/input/regression/follow-voice-consecutive.ly b/input/regression/follow-voice-consecutive.ly
new file mode 100644
index 0000000..97ffc41
--- /dev/null
+++ b/input/regression/follow-voice-consecutive.ly
@@ -0,0 +1,23 @@
+\version "2.11.46"
+
+\header {
+  texidoc= "The voice follower is not confused when set for consecutive
+sets of staff switches."
+}
+
+\new PianoStaff \relative c' <<
+  \new Staff = "one" {
+    c4
+    \showStaffSwitch
+    \change Staff = two
+    a4
+    \hideStaffSwitch
+    \change Staff = one
+    c4
+    \showStaffSwitch
+    \change Staff = two
+    a4
+    \hideStaffSwitch
+  }
+  \new Staff = "two" { \clef bass s1 }
+>>
diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc
index 152297d..c00da9e 100644
--- a/lily/note-head-line-engraver.cc
+++ b/lily/note-head-line-engraver.cc
@@ -54,20 +54,19 @@ void
 Note_head_line_engraver::acknowledge_rhythmic_head (Grob_info info)
 {
   head_ = info.grob ();
-  if (to_boolean (get_property ("followVoice")))
+  Context *tr = context ();
+
+  while (tr && !tr->is_alias (ly_symbol2scm ("Staff")))
+    tr = tr->get_parent_context ();
+
+  if (tr
+      && tr->is_alias (ly_symbol2scm ("Staff")) && tr != last_staff_
+      && to_boolean (get_property ("followVoice")))
     {
-      Context *tr = context ();
-      while (tr && !tr->is_alias (ly_symbol2scm ("Staff")))
-	tr = tr->get_parent_context ();
-
-      if (tr
-	  && tr->is_alias (ly_symbol2scm ("Staff")) && tr != last_staff_)
-	{
-	  if (last_head_)
-	    follow_ = true;
-	  last_staff_ = tr;
-	}
+      if (last_head_)
+        follow_ = true;	 
     }
+  last_staff_ = tr;    
 }
 
 void
-- 
1.5.4.3

_______________________________________________
lilypond-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to