void handler::leave() { handler_vector members = handler_members(); if(!members.empty()) { for(handler_vector::iterator i = members.begin(); i != members.end(); ++i) { (*i)->leave(); } } else { assert(event_contexts.empty() == false); } for(std::deque<context>::reverse_iterator i = event_contexts.rbegin(); i != event_contexts.rend(); ++i) { if(i->remove_handler(this)) { break; } } has_joined_ = false; }
void handler::join() { if(has_joined_) { leave(); // should not be in multiple event contexts } //join self event_contexts.back().add_handler(this); has_joined_ = true; //instruct members to join handler_vector members = handler_members(); if(!members.empty()) { for(handler_vector::iterator i = members.begin(); i != members.end(); ++i) { (*i)->join(); } } }
void sdl_handler::join(context &c) { if (has_joined_global_) { leave_global(); } if(has_joined_) { leave(); // should not be in multiple event contexts } //join self c.add_handler(this); has_joined_ = true; //instruct members to join sdl_handler_vector members = handler_members(); if(!members.empty()) { for(sdl_handler_vector::iterator i = members.begin(); i != members.end(); ++i) { (*i)->join(c); } } }