diff options
Diffstat (limited to 'src/components/script/dom/event.rs')
-rw-r--r-- | src/components/script/dom/event.rs | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/src/components/script/dom/event.rs b/src/components/script/dom/event.rs index b8ff54f5755..02acca10937 100644 --- a/src/components/script/dom/event.rs +++ b/src/components/script/dom/event.rs @@ -31,6 +31,13 @@ pub struct AbstractEvent { event: *mut Box<Event> } +pub enum EventPhase { + Phase_None = 0, + Phase_Capturing, + Phase_At_Target, + Phase_Bubbling +} + impl AbstractEvent { pub fn from_box(box: *mut Box<Event>) -> AbstractEvent { AbstractEvent { @@ -95,6 +102,14 @@ impl AbstractEvent { assert!(self.is_mouseevent()); self.transmute_mut() } + + pub fn propagation_stopped(&self) -> bool { + self.event().stop_propagation + } + + pub fn bubbles(&self) -> bool { + self.event().bubbles + } } impl DerivedWrapper for AbstractEvent { @@ -138,11 +153,18 @@ pub enum EventTypeId { pub struct Event { type_id: EventTypeId, reflector_: Reflector, + current_target: Option<AbstractEventTarget>, + target: Option<AbstractEventTarget>, type_: ~str, + phase: EventPhase, default_prevented: bool, + stop_propagation: bool, + stop_immediate: bool, cancelable: bool, bubbles: bool, trusted: bool, + dispatching: bool, + initialized: bool } impl Event { @@ -150,11 +172,18 @@ impl Event { Event { type_id: type_id, reflector_: Reflector::new(), + current_target: None, + target: None, + phase: Phase_None, type_: ~"", default_prevented: false, cancelable: true, bubbles: true, - trusted: false + trusted: false, + dispatching: false, + stop_propagation: false, + stop_immediate: false, + initialized: false, } } @@ -173,7 +202,7 @@ impl Event { } pub fn EventPhase(&self) -> u16 { - 0 + self.phase as u16 } pub fn Type(&self) -> DOMString { @@ -181,11 +210,11 @@ impl Event { } pub fn GetTarget(&self) -> Option<AbstractEventTarget> { - None + self.target } pub fn GetCurrentTarget(&self) -> Option<AbstractEventTarget> { - None + self.current_target } pub fn DefaultPrevented(&self) -> bool { @@ -193,13 +222,18 @@ impl Event { } pub fn PreventDefault(&mut self) { - self.default_prevented = true + if self.cancelable { + self.default_prevented = true + } } pub fn StopPropagation(&mut self) { + self.stop_propagation = true; } pub fn StopImmediatePropagation(&mut self) { + self.stop_immediate = true; + self.stop_propagation = true; } pub fn Bubbles(&self) -> bool { @@ -221,6 +255,7 @@ impl Event { self.type_ = null_str_as_word_null(type_); self.cancelable = cancelable; self.bubbles = bubbles; + self.initialized = true; Ok(()) } |