X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flistener.cc;h=c785ff3d72d502302f4f6ba98fbaaa91fbf6d018;hb=deafba084c8ecf6af02f64455856147821b598c7;hp=edc96bdf1c84aed5a51c69b87ae4914a125ebe77;hpb=c83f8abe0c27faabcad658ff3a9691158c62c3a3;p=lilypond.git diff --git a/lily/listener.cc b/lily/listener.cc index edc96bdf1c..c785ff3d72 100644 --- a/lily/listener.cc +++ b/lily/listener.cc @@ -1,15 +1,32 @@ /* - listener.cc -- implement Listener and Listener_target + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005 Erik Sandberg - (c) 2005 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "listener.hh" #include "ly-smobs.icc" #include "warn.hh" +Listener::Listener () +{ + target_ = 0; + type_ = 0; +} + Listener::Listener (const void *target, Listener_function_table *type) { target_ = (void *)target; @@ -19,10 +36,11 @@ Listener::Listener (const void *target, Listener_function_table *type) Listener::Listener (Listener const &other) { target_ = other.target_; - type_ = other.type_; + type_ = other.type_; } -void Listener::listen (SCM ev) const { +void Listener::listen (SCM ev) const +{ (type_->listen_callback) (target_, ev); } @@ -30,12 +48,13 @@ SCM Listener::mark_smob (SCM sm) { Listener *me = (Listener *) SCM_CELL_WORD_1 (sm); - (me->type_->mark_callback) (me->target_); + if (me->type_) + (me->type_->mark_callback) (me->target_); return SCM_EOL; } int -Listener::print_smob (SCM s, SCM p, scm_print_state*) +Listener::print_smob (SCM, SCM p, scm_print_state *) { scm_puts ("#", p); return 1; @@ -51,4 +70,4 @@ Listener::equal_p (SCM a, SCM b) } IMPLEMENT_SIMPLE_SMOBS (Listener); -IMPLEMENT_TYPE_P (Listener, "listener"); +IMPLEMENT_TYPE_P (Listener, "ly:listener?");