+ ASSIGN_EVENT_ONCE (tempo_ev_, ev);
+}
+
+static bool
+safe_is_member (SCM scm, SCM lst)
+{
+ return ly_is_list (lst) && scm_is_true (scm_member (scm, lst));
+}
+
+void
+Metronome_mark_engraver::acknowledge_break_aligned (Grob_info info)
+{
+ Grob *g = info.grob ();
+
+ if (text_
+ && scm_is_eq (g->get_property ("break-align-symbol"),
+ ly_symbol2scm ("staff-bar")))
+ bar_ = g;
+ else if (text_
+ && !support_
+ && safe_is_member (g->get_property ("break-align-symbol"),
+ text_->get_property ("break-align-symbols"))
+ && Item::break_visible (g))
+ {
+ support_ = g;
+ text_->set_parent (g, X_AXIS);
+ }
+ if (bar_ || support_)
+ text_->set_property ("non-musical", SCM_BOOL_T);
+}
+
+void
+Metronome_mark_engraver::acknowledge_break_alignment (Grob_info info)
+{
+ Grob *g = info.grob ();
+
+ if (text_
+ && support_
+ && dynamic_cast<Item *> (g))
+ text_->set_parent (g, X_AXIS);
+}
+
+void
+Metronome_mark_engraver::acknowledge_grob (Grob_info info)
+{
+ Grob *g = info.grob ();
+
+ if (text_)
+ for (SCM s = text_->get_property ("non-break-align-symbols");
+ scm_is_pair (s);
+ s = scm_cdr (s))
+ if (g->internal_has_interface (scm_car (s)))
+ text_->set_parent (g, X_AXIS);