X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Feventdispatcher.cpp;h=02330ec11fd7db97e7025703b57b246380daab5f;hp=04147e9bee4647e6d452c2d8e35e4f3eac61265c;hb=73a21b6f495e16707ede460a2c9d8f1474bb4d93;hpb=c0861d1f8e3869f058bc8b152cd35a08e5b03e73 diff --git a/source/eventdispatcher.cpp b/source/eventdispatcher.cpp index 04147e9..02330ec 100644 --- a/source/eventdispatcher.cpp +++ b/source/eventdispatcher.cpp @@ -9,9 +9,6 @@ Distributed under the LGPL #include "eventdispatcher.h" #include "poll.h" -#include -using namespace std; - namespace Msp { namespace IO { @@ -20,13 +17,12 @@ EventDispatcher::EventDispatcher() void EventDispatcher::add(Base &obj) { - //cout<<"evdisp add "<<&obj<<'\n'; - SlotMap::iterator i=objects.find(&obj); + SlotMap::iterator i = objects.find(&obj); if(i==objects.end()) { - i=objects.insert(SlotMap::value_type(&obj, Slot(&obj))).first; - i->second.evch_conn=obj.signal_events_changed.connect(sigc::bind(sigc::mem_fun(this, &EventDispatcher::object_events_changed), &obj)); - i->second.del_conn=obj.signal_deleted.connect(sigc::bind(sigc::mem_fun(this, &EventDispatcher::object_deleted), &obj)); + i = objects.insert(SlotMap::value_type(&obj, Slot(&obj))).first; + i->second.evch_conn = obj.signal_events_changed.connect(sigc::bind(sigc::mem_fun(this, &EventDispatcher::object_events_changed), &obj)); + i->second.del_conn = obj.signal_deleted.connect(sigc::bind(sigc::mem_fun(this, &EventDispatcher::object_deleted), &obj)); if(obj.get_events()) poller.set_object(obj, obj.get_events()); @@ -35,8 +31,7 @@ void EventDispatcher::add(Base &obj) void EventDispatcher::remove(Base &obj) { - //cout<<"evdisp remove "<<&obj<<'\n'; - SlotMap::iterator i=objects.find(&obj); + SlotMap::iterator i = objects.find(&obj); if(i!=objects.end()) { i->second.evch_conn.disconnect(); @@ -47,23 +42,22 @@ void EventDispatcher::remove(Base &obj) } } -void EventDispatcher::tick(bool block) +void EventDispatcher::tick() { if(objects.empty()) return; - int ret; - if(block) - ret=poller.poll(); - else - ret=poller.poll(Time::zero); + if(poller.poll()>0) + dispatch(); +} - if(ret>0) - { - const Poller::SlotSeq &result=poller.get_result(); - for(Poller::SlotSeq::const_iterator i=result.begin(); i!=result.end(); ++i) - i->object->event(i->events); - } +void EventDispatcher::tick(const Time::TimeDelta &dt) +{ + if(objects.empty()) + return; + + if(poller.poll(dt)>0) + dispatch(); } void EventDispatcher::object_events_changed(PollEvent ev, Base *obj) @@ -76,5 +70,12 @@ void EventDispatcher::object_deleted(Base *obj) remove(*obj); } +void EventDispatcher::dispatch() +{ + const Poller::SlotSeq &result = poller.get_result(); + for(Poller::SlotSeq::const_iterator i=result.begin(); i!=result.end(); ++i) + i->object->event(i->events); +} + } // namespace IO } // namespace Msp