From c6fa1f3698353ad146036310d975c4b4618d7375 Mon Sep 17 00:00:00 2001
From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Mon, 1 Jan 2007 18:52:37 +0100
Subject: [PATCH] Fix #192.

Store separation-item in tie, and use that iso. bound when broken.

Conflicts:

	lily/tie-formatting-problem.cc
	lily/tie.cc
---
 input/regression/tie-broken-other-staff.ly | 15 +++++++++++++++
 lily/tie-engraver.cc                       |  9 +++++++--
 lily/tie-formatting-problem.cc             | 11 +++++++++--
 lily/tie.cc                                |  4 ++++
 scm/define-grob-properties.scm             |  1 +
 5 files changed, 36 insertions(+), 4 deletions(-)
 create mode 100644 input/regression/tie-broken-other-staff.ly

diff --git a/input/regression/tie-broken-other-staff.ly b/input/regression/tie-broken-other-staff.ly
new file mode 100644
index 0000000000..0bfca6aa52
--- /dev/null
+++ b/input/regression/tie-broken-other-staff.ly
@@ -0,0 +1,15 @@
+\header {
+  texidoc = "Broken tie lengths are not affected by clefs
+in other staves."
+}
+
+\version "2.10.0"
+
+\layout {
+  ragged-right = ##t
+}
+
+<<
+  \new Staff \relative c'''{ e1 ~ \break e }
+  \new Staff \relative c{ \clef bass a \clef treble cis }
+>>
diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc
index af3c5a4ad6..243b14b43f 100644
--- a/lily/tie-engraver.cc
+++ b/lily/tie-engraver.cc
@@ -181,9 +181,14 @@ Tie_engraver::stop_translation_timestep ()
       if (!wait)
 	heads_to_tie_.clear ();
 
+      Grob *sep = unsmob_grob (get_property ("breakableSeparationItem"));
       for (vsize i = 0; i < ties_.size (); i++)
-	typeset_tie (ties_[i]);
-
+	{
+	  if (sep)
+	    ties_[i]->set_object  ("separation-item", sep->self_scm ());
+	  
+	  typeset_tie (ties_[i]);
+	}
       ties_.clear ();
       tie_column_ = 0;
     }
diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc
index 4dada25d22..fa72e3f18a 100644
--- a/lily/tie-formatting-problem.cc
+++ b/lily/tie-formatting-problem.cc
@@ -202,7 +202,7 @@ Tie_formatting_problem::set_column_chord_outline (vector<Item*> bounds,
 				    Y_AXIS, -dir);
     }
   while (flip (&updowndir) != DOWN);
-  
+
   head_extents_[key].set_empty ();
   for (vsize i = 0; i < head_boxes.size (); i++)
     {
@@ -276,7 +276,14 @@ Tie_formatting_problem::from_ties (vector<Grob*> const &ties)
       for (vsize i = 0; i < ties.size (); i++)
 	{
 	  Item *it = dynamic_cast<Spanner*> (ties[i])->get_bound (d);
-					     
+	  if (it->break_status_dir ())
+	    {
+	      Item *sep
+		= dynamic_cast<Item*> (unsmob_grob (ties[i]->get_object ("separation-item")));
+	      if (sep && sep->get_column () == it->get_column ())
+		it = sep;
+	    }
+	  
 	  bounds.push_back (it);
 	}
       
diff --git a/lily/tie.cc b/lily/tie.cc
index 1263237688..bbda8722f1 100644
--- a/lily/tie.cc
+++ b/lily/tie.cc
@@ -302,12 +302,16 @@ ADD_INTERFACE (Tie,
 	       "dash-period "
 	       "details "
 	       "direction "
+	       "separation-item "
+	       "head-direction "
 	       "line-thickness " 
 	       "quant-score "
 	       "staff-position "
 	       "thickness "
+
 	       );
 
 
 
 
+
diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm
index dddcef9aee..779f6e45ff 100644
--- a/scm/define-grob-properties.scm
+++ b/scm/define-grob-properties.scm
@@ -484,6 +484,7 @@ useful clues.
 ")
      (note-heads ,ly:grob-array? "List of note head grobs")
      (note-head ,ly:grob? "A single note head")
+     (separation-item ,ly:grob? "A separation item.")
      (side-support-elements ,ly:grob-array? "the support, a list of grobs.")
      (spacing-wishes ,ly:grob-array? "List of note spacing or staff spacing objects.")
      (stems ,ly:grob-array? "list of stem objects, corresponding to the notes that the arpeggio has to be before.")
-- 
2.39.5