mirror of
https://github.com/servo/servo.git
synced 2025-06-23 08:34:42 +01:00
Make EventTarget::handlers store a Vec.
This commit is contained in:
parent
25357434e1
commit
251e22266e
1 changed files with 6 additions and 6 deletions
|
@ -37,7 +37,7 @@ pub struct EventListenerEntry {
|
||||||
pub struct EventTarget {
|
pub struct EventTarget {
|
||||||
pub type_id: EventTargetTypeId,
|
pub type_id: EventTargetTypeId,
|
||||||
pub reflector_: Reflector,
|
pub reflector_: Reflector,
|
||||||
pub handlers: HashMap<DOMString, ~[EventListenerEntry]>,
|
pub handlers: HashMap<DOMString, Vec<EventListenerEntry>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EventTarget {
|
impl EventTarget {
|
||||||
|
@ -49,14 +49,14 @@ impl EventTarget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_listeners(&self, type_: &str) -> Option<~[EventListener]> {
|
pub fn get_listeners(&self, type_: &str) -> Option<Vec<EventListener>> {
|
||||||
self.handlers.find_equiv(&type_).map(|listeners| {
|
self.handlers.find_equiv(&type_).map(|listeners| {
|
||||||
listeners.iter().map(|entry| entry.listener).collect()
|
listeners.iter().map(|entry| entry.listener).collect()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_listeners_for(&self, type_: &str, desired_phase: ListenerPhase)
|
pub fn get_listeners_for(&self, type_: &str, desired_phase: ListenerPhase)
|
||||||
-> Option<~[EventListener]> {
|
-> Option<Vec<EventListener>> {
|
||||||
self.handlers.find_equiv(&type_).map(|listeners| {
|
self.handlers.find_equiv(&type_).map(|listeners| {
|
||||||
let filtered = listeners.iter().filter(|entry| entry.phase == desired_phase);
|
let filtered = listeners.iter().filter(|entry| entry.phase == desired_phase);
|
||||||
filtered.map(|entry| entry.listener).collect()
|
filtered.map(|entry| entry.listener).collect()
|
||||||
|
@ -68,13 +68,13 @@ impl EventTarget {
|
||||||
listener: Option<EventListener>,
|
listener: Option<EventListener>,
|
||||||
capture: bool) {
|
capture: bool) {
|
||||||
for &listener in listener.iter() {
|
for &listener in listener.iter() {
|
||||||
let entry = self.handlers.find_or_insert_with(ty.clone(), |_| ~[]);
|
let entry = self.handlers.find_or_insert_with(ty.clone(), |_| vec!());
|
||||||
let phase = if capture { Capturing } else { Bubbling };
|
let phase = if capture { Capturing } else { Bubbling };
|
||||||
let new_entry = EventListenerEntry {
|
let new_entry = EventListenerEntry {
|
||||||
phase: phase,
|
phase: phase,
|
||||||
listener: listener
|
listener: listener
|
||||||
};
|
};
|
||||||
if entry.position_elem(&new_entry).is_none() {
|
if entry.as_slice().position_elem(&new_entry).is_none() {
|
||||||
entry.push(new_entry);
|
entry.push(new_entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ impl EventTarget {
|
||||||
phase: phase,
|
phase: phase,
|
||||||
listener: listener
|
listener: listener
|
||||||
};
|
};
|
||||||
let position = entry.position_elem(&old_entry);
|
let position = entry.as_slice().position_elem(&old_entry);
|
||||||
for &position in position.iter() {
|
for &position in position.iter() {
|
||||||
entry.remove(position);
|
entry.remove(position);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue