]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4324: Don't create Bottom to announce TimeSignatureEvent
authorDavid Kastrup <dak@gnu.org>
Sun, 15 Mar 2015 11:15:18 +0000 (12:15 +0100)
committerDavid Kastrup <dak@gnu.org>
Mon, 23 Mar 2015 12:14:22 +0000 (13:14 +0100)
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.

scm/define-music-callbacks.scm

index 34fa7b1a173ac29c93ab6e22240065bd5ecba58b..f2d89ae71fd4cd9560b4ed232f0fccff6d9b8002 100644 (file)
@@ -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?