+ if (beam_
+ && !scm_is_number (info.grob ()->get_property_data ("staff-position")))
+ chain_offset_callback (info.grob (),
+ Unpure_pure_container::make_smob
+ (Beam::rest_collision_callback_proc,
+ Beam::pure_rest_collision_callback_proc),
+ Y_AXIS);
+}
+
+void
+Beam_engraver::acknowledge_stem (Grob_info info)
+{
+ if (!beam_)
+ return;
+
+ Moment now = now_mom ();
+ if (!valid_start_point ())
+ return;
+
+ // It's suboptimal that we don't support callbacks returning ##f,
+ // but this makes beams have no effect on "stems" reliably in
+ // TabStaff when \tabFullNotation is switched off: the real stencil
+ // callback for beams is called quite late in the process, and we
+ // don't want to trigger it early.
+ if (scm_is_false (beam_->get_property_data ("stencil")))
+ return;
+
+ Item *stem = dynamic_cast<Item *> (info.grob ());
+ if (Stem::get_beam (stem))
+ return;
+
+ Stream_event *ev = info.ultimate_event_cause ();
+ if (!ev->in_event_class ("rhythmic-event"))
+ {
+ info.grob ()->warning (_ ("stem must have Rhythmic structure"));
+ return;
+ }
+
+ last_stem_added_at_ = now;
+
+ Duration *stem_duration = unsmob<Duration> (ev->get_property ("duration"));
+ int durlog = stem_duration->duration_log ();
+ //int durlog = unsmob<Duration> (ev->get_property ("duration"))->duration_log ();
+ if (durlog <= 2)