Use early returns in dispatch_to_listeners.

This commit is contained in:
Ms2ger 2015-09-16 13:47:13 +02:00
parent 995cb21b48
commit af6bc108f3

View file

@ -37,26 +37,30 @@ fn dispatch_to_listeners(event: &Event, target: &EventTarget, chain: &[&EventTar
}
}
}
if event.stop_propagation() {
return;
}
/* at target */
if !event.stop_propagation() {
event.set_phase(EventPhase::AtTarget);
event.set_current_target(target.clone());
event.set_phase(EventPhase::AtTarget);
event.set_current_target(target.clone());
if let Some(listeners) = target.get_listeners(&type_) {
for listener in listeners {
// Explicitly drop any exception on the floor.
listener.call_or_handle_event(target, event, Report);
if let Some(listeners) = target.get_listeners(&type_) {
for listener in listeners {
// Explicitly drop any exception on the floor.
listener.call_or_handle_event(target, event, Report);
if event.stop_immediate() {
break;
}
if event.stop_immediate() {
break;
}
}
}
if event.stop_propagation() {
return;
}
/* bubbling */
if event.bubbles() && !event.stop_propagation() {
if event.bubbles() {
event.set_phase(EventPhase::Bubbling);
for cur_target in chain {