From: David Kastrup Date: Mon, 6 Jun 2016 11:54:40 +0000 (+0200) Subject: Issue 4906/3: ADD_ACKNOWLEDGER/LISTENER_FOR X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=3d76daf5b141b8ceeb3a04a7d001bfec857e1f1e;p=lilypond.git Issue 4906/3: ADD_ACKNOWLEDGER/LISTENER_FOR Add macros allowing to listen/acknowledge to events/grobs unrelated to the actual listener name. --- diff --git a/lily/include/translator.icc b/lily/include/translator.icc index df618db761..02f9fbe8c7 100644 --- a/lily/include/translator.icc +++ b/lily/include/translator.icc @@ -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 */