diff options
-rw-r--r-- | components/script/dom/eventdispatcher.rs | 52 | ||||
-rw-r--r-- | components/script/dom/eventtarget.rs | 4 |
2 files changed, 26 insertions, 30 deletions
diff --git a/components/script/dom/eventdispatcher.rs b/components/script/dom/eventdispatcher.rs index 966314062b5..072380281f7 100644 --- a/components/script/dom/eventdispatcher.rs +++ b/components/script/dom/eventdispatcher.rs @@ -67,20 +67,19 @@ fn dispatch_to_listeners(event: &Event, target: &EventTarget, chain: &[&EventTar /* capturing */ event.set_phase(EventPhase::Capturing); for cur_target in chain.iter().rev() { - if let Some(listeners) = cur_target.get_listeners_for(&type_, Some(ListenerPhase::Capturing)) { - event.set_current_target(cur_target); - for listener in &listeners { - handle_event(window.r(), listener, *cur_target, event); - - if event.stop_immediate() { - return; - } - } + let listeners = cur_target.get_listeners_for(&type_, Some(ListenerPhase::Capturing)); + event.set_current_target(cur_target); + for listener in &listeners { + handle_event(window.r(), listener, *cur_target, event); - if event.stop_propagation() { + if event.stop_immediate() { return; } } + + if event.stop_propagation() { + return; + } } assert!(!event.stop_propagation()); @@ -90,18 +89,16 @@ fn dispatch_to_listeners(event: &Event, target: &EventTarget, chain: &[&EventTar event.set_phase(EventPhase::AtTarget); event.set_current_target(target); - if let Some(listeners) = target.get_listeners_for(&type_, None) { - for listener in listeners { - handle_event(window.r(), &listener, target, event); + for listener in target.get_listeners_for(&type_, None) { + handle_event(window.r(), &listener, target, event); - if event.stop_immediate() { - return; - } - } - if event.stop_propagation() { + if event.stop_immediate() { return; } } + if event.stop_propagation() { + return; + } assert!(!event.stop_propagation()); assert!(!event.stop_immediate()); @@ -113,20 +110,19 @@ fn dispatch_to_listeners(event: &Event, target: &EventTarget, chain: &[&EventTar event.set_phase(EventPhase::Bubbling); for cur_target in chain { - if let Some(listeners) = cur_target.get_listeners_for(&type_, Some(ListenerPhase::Bubbling)) { - event.set_current_target(cur_target); - for listener in &listeners { - handle_event(window.r(), listener, *cur_target, event); - - if event.stop_immediate() { - return; - } - } + let listeners = cur_target.get_listeners_for(&type_, Some(ListenerPhase::Bubbling)); + event.set_current_target(cur_target); + for listener in &listeners { + handle_event(window.r(), listener, *cur_target, event); - if event.stop_propagation() { + if event.stop_immediate() { return; } } + + if event.stop_propagation() { + return; + } } } diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 8c4df94a64d..21801e02062 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -304,8 +304,8 @@ impl EventTarget { pub fn get_listeners_for(&self, type_: &Atom, desired_phase: Option<ListenerPhase>) - -> Option<Vec<CompiledEventListener>> { - self.handlers.borrow_mut().get_mut(type_).map(|listeners| { + -> Vec<CompiledEventListener> { + self.handlers.borrow_mut().get_mut(type_).map_or(vec![], |listeners| { listeners.get_listeners(desired_phase, self, type_) }) } |