]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/dispatcher.cc
Let rhythmic-engraver make its articulation-or-event decision based on current listeners
[lilypond.git] / lily / dispatcher.cc
index 3758f46347da55032002c7555b60216149cf27ce..4db7c93a1555a66a9cffc6772ea9ac349a263379 100644 (file)
@@ -58,7 +58,8 @@ Dispatcher::print_smob (SCM s, SCM p, scm_print_state *)
 {
   Dispatcher *me = (Dispatcher *) SCM_CELL_WORD_1 (s);
   scm_puts ("#<Dispatcher ", p);
-  scm_write (scm_vector_to_list (me->listeners_), p);
+  scm_write (scm_call_1 (ly_lily_module_constant ("hash-table->alist"),
+                         me->listeners_), p);
   scm_puts (">", p);
   return 1;
 }
@@ -172,6 +173,27 @@ Dispatcher::dispatch (SCM sev)
 #endif
 }
 
+bool
+Dispatcher::is_listened (Stream_event *ev)
+{
+  SCM class_symbol = ev->get_property ("class");
+  if (!scm_is_symbol (class_symbol))
+    {
+      warning (_ ("Event class should be a symbol"));
+      return false;
+    }
+
+  for (SCM cl = scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), class_symbol);
+       scm_is_pair (cl); cl = scm_cdr (cl))
+    {
+      SCM list = scm_hashq_ref (listeners_, scm_car (cl), SCM_EOL);
+      if (scm_is_pair (list))
+        return true;
+    }
+  return false;
+}
+
+
 void
 Dispatcher::broadcast (Stream_event *ev)
 {