From 58956ae1c085b14dbee58b2dd6abb4edd5d81890 Mon Sep 17 00:00:00 2001
From: Neil Puttock <n.puttock@gmail.com>
Date: Sun, 10 Jul 2011 22:59:33 +0100
Subject: [PATCH] Fix #1751: Create HorizontalBracket grobs with correct
 event-cause.

* input/regression (horizontal-bracket-tweak.ly)

  new regtest: test \tweak behaviour for nested brackets

* lily/horizontal-bracket-engraver.cc (stop_translation_timestep):

  clear stored start-events so they don't hang around beyond the current
  timestep
---
 input/regression/horizontal-bracket-tweak.ly | 20 ++++++++++
 lily/horizontal-bracket-engraver.cc          | 42 ++++++++++----------
 2 files changed, 41 insertions(+), 21 deletions(-)
 create mode 100644 input/regression/horizontal-bracket-tweak.ly

diff --git a/input/regression/horizontal-bracket-tweak.ly b/input/regression/horizontal-bracket-tweak.ly
new file mode 100644
index 0000000000..ebd70698d5
--- /dev/null
+++ b/input/regression/horizontal-bracket-tweak.ly
@@ -0,0 +1,20 @@
+\version "2.15.5"
+
+\header {
+  texidoc = "Horizontal brackets are created with the correct event-cause, ensuring
+tweaks are applied to the correct spanner."
+}
+
+\layout {
+  \context {
+    \Voice
+    \consists "Horizontal_bracket_engraver"
+  }
+}
+
+\relative c' {
+  c1-\tweak #'thickness #6 \startGroup
+  c1\startGroup
+  c1\stopGroup
+  c1\stopGroup
+}
diff --git a/lily/horizontal-bracket-engraver.cc b/lily/horizontal-bracket-engraver.cc
index 2f67825a06..9d5c00503d 100644
--- a/lily/horizontal-bracket-engraver.cc
+++ b/lily/horizontal-bracket-engraver.cc
@@ -19,12 +19,12 @@
 
 #include "engraver.hh"
 #include "international.hh"
+#include "item.hh"
 #include "note-column.hh"
 #include "pointer-group-interface.hh"
 #include "side-position-interface.hh"
-#include "stream-event.hh"
 #include "spanner.hh"
-#include "item.hh"
+#include "stream-event.hh"
 
 #include "translator.icc"
 
@@ -32,8 +32,8 @@ class Horizontal_bracket_engraver : public Engraver
 {
 public:
   TRANSLATOR_DECLARATIONS (Horizontal_bracket_engraver);
-  vector<Spanner*> bracket_stack_;
-  vector<Stream_event*> events_;
+  vector<Spanner *> bracket_stack_;
+  vector<Stream_event *> events_;
   vsize pop_count_;
   vsize push_count_;
 
@@ -43,22 +43,6 @@ public:
   DECLARE_TRANSLATOR_LISTENER (note_grouping);
 };
 
-ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column);
-ADD_TRANSLATOR (Horizontal_bracket_engraver,
-		/* doc */
-		"Create horizontal brackets over notes for musical analysis"
-		" purposes.",
-
-		/* create */
-		"HorizontalBracket ",
-
-		/* read */
-		"",
-
-		/* write */
-		""
-		);
-
 Horizontal_bracket_engraver::Horizontal_bracket_engraver ()
 {
   pop_count_ = 0;
@@ -117,10 +101,26 @@ Horizontal_bracket_engraver::process_music ()
 void
 Horizontal_bracket_engraver::stop_translation_timestep ()
 {
-  for (int i = pop_count_; i--;)
+  for (vsize i = pop_count_; i--;)
     if (bracket_stack_.size ())
       bracket_stack_.pop_back ();
   pop_count_ = 0;
   push_count_ = 0;
+  events_.clear ();
 }
 
+ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column);
+ADD_TRANSLATOR (Horizontal_bracket_engraver,
+		/* doc */
+		"Create horizontal brackets over notes for musical analysis"
+		" purposes.",
+
+		/* create */
+		"HorizontalBracket ",
+
+		/* read */
+		"",
+
+		/* write */
+		""
+		);
-- 
2.39.5