aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/eventdispatcher.rs52
-rw-r--r--components/script/dom/eventtarget.rs4
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_)
})
}