X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fdispatcher.cc;h=6a11654e233465ea6a59de9947b8c28aba33f3f4;hb=b430c32d29caa72a7ae3f679f1f62066c1ebfa95;hp=e5efff922dd9eb264018142efe8d908e1e9402d0;hpb=b7a0cffbf9d1069860368f289a5b50e9d1d90ba8;p=lilypond.git diff --git a/lily/dispatcher.cc b/lily/dispatcher.cc index e5efff922d..6a11654e23 100644 --- a/lily/dispatcher.cc +++ b/lily/dispatcher.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005-2006 Erik Sandberg + Copyright (C) 2005--2011 Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -54,7 +54,7 @@ Dispatcher::mark_smob (SCM sm) } int -Dispatcher::print_smob (SCM s, SCM p, scm_print_state*) +Dispatcher::print_smob (SCM s, SCM p, scm_print_state *) { Dispatcher *me = (Dispatcher *) SCM_CELL_WORD_1 (s); scm_puts ("#get_property ("class"); - if (!scm_symbol_p (class_symbol)) + if (!scm_is_symbol (class_symbol)) { warning (_ ("Event class should be a symbol")); return; @@ -89,7 +89,9 @@ Dispatcher::dispatch (SCM sev) ev->origin ()->warning (_f ("Unknown event class %s", ly_symbol2string (class_symbol).c_str ())); return; } +#if 0 bool sent = false; +#endif int num_classes = scm_ilength (class_list); /* @@ -109,23 +111,23 @@ Dispatcher::dispatch (SCM sev) The first step is to collect all listener lists and to initially insert them in the priority queue. */ - struct { int prio; SCM list; } lists[num_classes+1]; + struct { int prio; SCM list; } lists[num_classes + 1]; int i = 0; for (SCM cl = class_list; scm_is_pair (cl); cl = scm_cdr (cl)) { SCM list = scm_hashq_ref (listeners_, scm_car (cl), SCM_EOL); if (!scm_is_pair (list)) - num_classes--; + num_classes--; else - { + { // bubblesort. int prio = scm_to_int (scm_caar (list)); - int j; - for (j = i; j > 0 && lists[j-1].prio > prio; j--) - lists[j] = lists[j-1]; - lists[j].prio = prio; - lists[j].list = list; - i++; + int j; + for (j = i; j > 0 && lists[j - 1].prio > prio; j--) + lists[j] = lists[j - 1]; + lists[j].prio = prio; + lists[j].list = list; + i++; } } lists[num_classes].prio = INT_MAX; @@ -148,23 +150,26 @@ Dispatcher::dispatch (SCM sev) Listener *l = unsmob_listener (scm_cdar (lists[0].list)); l->listen (ev->self_scm ()); +#if 0 sent = true; +#endif } // go to the next listener; bubble-sort the class list. SCM next = scm_cdr (lists[0].list); if (!scm_is_pair (next)) num_classes--; int prio = (scm_is_pair (next)) ? scm_to_int (scm_caar (next)) : INT_MAX; - for (i = 0; prio > lists[i+1].prio; i++) - lists[i] = lists[i+1]; + for (i = 0; prio > lists[i + 1].prio; i++) + lists[i] = lists[i + 1]; lists[i].prio = prio; lists[i].list = next; } -/* TODO: Uncomment. - if (!sent) - warning (_f ("Junking event: %s", ly_symbol2string (class_symbol).c_str ())); -*/ +#if 0 + /* TODO: Uncomment. */ + if (!sent) + warning (_f ("Junking event: %s", ly_symbol2string (class_symbol).c_str ())); +#endif } void @@ -185,17 +190,17 @@ Dispatcher::internal_add_listener (Listener l, SCM ev_class, int priority) SCM list = scm_hashq_ref (listeners_, ev_class, SCM_EOL); if (!scm_is_pair (list)) { - /* Tell all dispatchers that we listen to, that we want to hear ev_class + /* Tell all dispatchers that we listen to, that we want to hear ev_class events */ for (SCM disp = dispatchers_; scm_is_pair (disp); disp = scm_cdr (disp)) - { - int priority = scm_to_int (scm_cdar (disp)); - Dispatcher *d = unsmob_dispatcher (scm_caar (disp)); - d->internal_add_listener (GET_LISTENER (dispatch), ev_class, priority); - } + { + int priority = scm_to_int (scm_cdar (disp)); + Dispatcher *d = unsmob_dispatcher (scm_caar (disp)); + d->internal_add_listener (GET_LISTENER (dispatch), ev_class, priority); + } listen_classes_ = scm_cons (ev_class, listen_classes_); } - SCM entry = scm_cons (scm_int2num (priority), l.smobbed_copy ()); + SCM entry = scm_cons (scm_from_int (priority), l.smobbed_copy ()); list = scm_merge (list, scm_list_1 (entry), ly_lily_module_constant ("car<")); scm_hashq_set_x (listeners_, ev_class, list); } @@ -219,9 +224,9 @@ Dispatcher::remove_listener (Listener l, SCM ev_class) while (scm_is_pair (scm_cdr (e))) if (*unsmob_listener (scm_cdadr (e)) == l && first) { - scm_set_cdr_x (e, scm_cddr (e)); - first = false; - break; + scm_set_cdr_x (e, scm_cddr (e)); + first = false; + break; } else e = scm_cdr (e); @@ -234,10 +239,10 @@ Dispatcher::remove_listener (Listener l, SCM ev_class) { /* Unregister with all dispatchers. */ for (SCM disp = dispatchers_; scm_is_pair (disp); disp = scm_cdr (disp)) - { - Dispatcher *d = unsmob_dispatcher (scm_caar (disp)); - d->remove_listener (GET_LISTENER (dispatch), ev_class); - } + { + Dispatcher *d = unsmob_dispatcher (scm_caar (disp)); + d->remove_listener (GET_LISTENER (dispatch), ev_class); + } listen_classes_ = scm_delq_x (ev_class, listen_classes_); } } @@ -255,7 +260,7 @@ Dispatcher::register_as_listener (Dispatcher *disp) return; } - dispatchers_ = scm_acons (disp->self_scm (), scm_int2num (priority), dispatchers_); + dispatchers_ = scm_acons (disp->self_scm (), scm_from_int (priority), dispatchers_); Listener list = GET_LISTENER (dispatch); for (SCM cl = listen_classes_; scm_is_pair (cl); cl = scm_cdr (cl))