From: David Kastrup Date: Sun, 15 Mar 2015 11:15:18 +0000 (+0100) Subject: Issue 4324: Don't create Bottom to announce TimeSignatureEvent X-Git-Tag: release/2.19.18-1~12 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=fb79cea8ec10ebc40b96a05bf7f643e47fd93ddd;p=lilypond.git Issue 4324: Don't create Bottom to announce TimeSignatureEvent As a fallout of issue 4138, << \time 3/4 \new Staff c2. >> created a spurious Staff only containing a time signature. This change avoids the creation of a Bottom context just for accommodating \time. As a result, { \tweak color #red \time 3/4 c2. } will no longer show a change in color since no Staff context exists at the time \time is executed and consequently the tweak does not apply anywhere. You have to use \time in existing Staff contexts to have either \tweak and point&click have an effect (and get an error locator when something with typesetting the signature goes wrong). Outside of such contexts, \time just changes properties of the Timing context. --- diff --git a/scm/define-music-callbacks.scm b/scm/define-music-callbacks.scm index 34fa7b1a17..f2d89ae71f 100644 --- a/scm/define-music-callbacks.scm +++ b/scm/define-music-callbacks.scm @@ -125,7 +125,24 @@ to be used by the sequential-iterator" context 'measureLength new-measure-length)))) 'Timing) 'Score) - (make-music 'TimeSignatureEvent music)))) + ;; (make-music 'TimeSignatureEvent music) would always + ;; create a Bottom context. So instead, we just send the + ;; event to whatever context may be currently active. If + ;; that is not contained within an existing context with + ;; TimeSignatureEngraver at the time \time is iterated, it + ;; will drop through the floor which mostly means that + ;; point&click and tweaks are not available for any time + ;; signatures engraved due to the Timing property changes + ;; but without a \time of its own. This is more a + ;; "notification" rather than an "event" (which is always + ;; sent to Bottom) but we don't currently have iterators for + ;; that. + (make-apply-context + (lambda (context) + (ly:broadcast (ly:context-event-source context) + (ly:make-stream-event + (ly:make-event-class 'time-signature-event) + (ly:music-mutable-properties music)))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Some MIDI callbacks -- is this a good place for them?