diff options
-rw-r--r-- | src/components/script/dom/event.rs | 15 | ||||
-rw-r--r-- | src/components/script/dom/eventdispatcher.rs | 2 |
2 files changed, 9 insertions, 8 deletions
diff --git a/src/components/script/dom/event.rs b/src/components/script/dom/event.rs index 9f7ab79dddb..8da845845a1 100644 --- a/src/components/script/dom/event.rs +++ b/src/components/script/dom/event.rs @@ -10,6 +10,7 @@ use dom::bindings::error::Fallible; use dom::eventtarget::EventTarget; use dom::window::Window; use servo_util::str::DOMString; +use std::cell::Cell; use geom::point::Point2D; @@ -46,8 +47,8 @@ pub enum EventTypeId { pub struct Event { pub type_id: EventTypeId, pub reflector_: Reflector, - pub current_target: Option<JS<EventTarget>>, - pub target: Option<JS<EventTarget>>, + pub current_target: Cell<Option<JS<EventTarget>>>, + pub target: Cell<Option<JS<EventTarget>>>, pub type_: DOMString, pub phase: EventPhase, pub canceled: bool, @@ -66,8 +67,8 @@ impl Event { Event { type_id: type_id, reflector_: Reflector::new(), - current_target: None, - target: None, + current_target: Cell::new(None), + target: Cell::new(None), phase: PhaseNone, type_: "".to_owned(), canceled: false, @@ -123,11 +124,11 @@ impl<'a> EventMethods for JSRef<'a, Event> { } fn GetTarget(&self) -> Option<Temporary<EventTarget>> { - self.target.as_ref().map(|target| Temporary::new(target.clone())) + self.target.get().as_ref().map(|target| Temporary::new(target.clone())) } fn GetCurrentTarget(&self) -> Option<Temporary<EventTarget>> { - self.current_target.as_ref().map(|target| Temporary::new(target.clone())) + self.current_target.get().as_ref().map(|target| Temporary::new(target.clone())) } fn DefaultPrevented(&self) -> bool { @@ -173,7 +174,7 @@ impl<'a> EventMethods for JSRef<'a, Event> { self.stop_immediate = false; self.canceled = false; self.trusted = false; - self.target = None; + self.target.set(None); self.type_ = type_; self.bubbles = bubbles; self.cancelable = cancelable; diff --git a/src/components/script/dom/eventdispatcher.rs b/src/components/script/dom/eventdispatcher.rs index 11db1eb7b2b..819bd135bf6 100644 --- a/src/components/script/dom/eventdispatcher.rs +++ b/src/components/script/dom/eventdispatcher.rs @@ -140,7 +140,7 @@ pub fn dispatch_event<'a, 'b>(target: &JSRef<'a, EventTarget>, event.dispatching = false; event.phase = PhaseNone; - event.current_target = None; + event.current_target.set(None); !event.DefaultPrevented() } |