void EventDispatcher::add(EventObject &obj)
{
Slot slot(*this, obj);
- set<Slot>::iterator i = objects.find(slot);
+ auto i = objects.find(slot);
if(i==objects.end())
{
i = objects.insert(slot).first;
void EventDispatcher::remove(EventObject &obj)
{
- set<Slot>::iterator i = objects.find(Slot(*this, obj));
+ auto i = objects.find(Slot(*this, obj));
if(i!=objects.end())
{
objects.erase(i);
void EventDispatcher::dispatch()
{
- const Poller::SlotList &result = poller.get_result();
- for(Poller::SlotList::const_iterator i=result.begin(); i!=result.end(); ++i)
- i->object->event(i->events);
+ for(const Poller::PolledObject &po: poller.get_result())
+ if(objects.count(Slot(*this, *po.object)))
+ po.object->event(po.events);
}
-EventDispatcher::Slot::Slot(EventDispatcher &d, EventObject &o):
- disp(d),
- obj(o)
-{ }
-
void EventDispatcher::Slot::connect_signals() const
{
obj.signal_events_changed.connect(sigc::mem_fun(this, &Slot::events_changed));