]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4906/3: ADD_ACKNOWLEDGER/LISTENER_FOR
authorDavid Kastrup <dak@gnu.org>
Mon, 6 Jun 2016 11:54:40 +0000 (13:54 +0200)
committerDavid Kastrup <dak@gnu.org>
Mon, 4 Jul 2016 08:01:56 +0000 (10:01 +0200)
Add macros allowing to listen/acknowledge to events/grobs unrelated
to the actual listener name.

lily/include/translator.icc

index df618db761e105e8ac13843fd3fc291d0ed9e1dd..02f9fbe8c7b629dcb6852265148b3a3d837ad32d 100644 (file)
@@ -96,23 +96,28 @@ void add_acknowledger (SCM ptr,
                        char const *func_name,
                        SCM &ack_hash);
 
-#define ADD_ACKNOWLEDGER(CLASS, NAME)                                   \
+#define ADD_ACKNOWLEDGER_FOR(CLASS, NAME, GROB)                         \
   add_acknowledger (method_finder<&CLASS::acknowledge_ ## NAME> (),     \
-                    #NAME, acknowledge_static_array_drul_[START])
+                    #GROB, acknowledge_static_array_drul_[START])
 
-#define ADD_END_ACKNOWLEDGER(CLASS, NAME)                               \
+#define ADD_ACKNOWLEDGER(CLASS, NAME) ADD_ACKNOWLEDGER_FOR (CLASS, NAME, NAME)
+
+#define ADD_END_ACKNOWLEDGER_FOR(CLASS, NAME, GROB)                     \
   add_acknowledger (method_finder<&CLASS::acknowledge_end_ ## NAME> (), \
-                    #NAME, acknowledge_static_array_drul_[STOP])
+                    #GROB, acknowledge_static_array_drul_[STOP])
 
+#define ADD_END_ACKNOWLEDGER(CLASS, NAME) ADD_END_ACKNOWLEDGER_FOR (CLASS, NAME, NAME)
 
 /*
   Implement the method cl::listen_##m, and make it listen to stream
   events of class m.
  */
-#define ADD_LISTENER(cl, m)                                             \
+#define ADD_LISTENER_FOR(cl, m, ev)                                     \
   listener_list_ = scm_acons                                            \
-    (event_class_symbol (#m),                                           \
+    (event_class_symbol (#ev),                                          \
      method_finder<&cl::listen_ ## m> (),                               \
      listener_list_)
 
+#define ADD_LISTENER(cl, m) ADD_LISTENER_FOR (cl, m, m)
+
 #endif /* TRANSLATOR_ICC */