aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/event.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/event.rs')
-rw-r--r--src/components/script/dom/event.rs105
1 files changed, 53 insertions, 52 deletions
diff --git a/src/components/script/dom/event.rs b/src/components/script/dom/event.rs
index 8bb636c0f82..a151aed5026 100644
--- a/src/components/script/dom/event.rs
+++ b/src/components/script/dom/event.rs
@@ -4,14 +4,15 @@
use dom::bindings::codegen::Bindings::EventBinding;
use dom::bindings::codegen::Bindings::EventBinding::EventConstants;
+use dom::bindings::error::Fallible;
use dom::bindings::js::{JS, JSRef, Temporary};
+use dom::bindings::trace::Untraceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
-use dom::bindings::error::Fallible;
use dom::eventtarget::EventTarget;
use dom::window::Window;
use servo_util::str::DOMString;
use servo_util::geometry::PagePx;
-use std::cell::Cell;
+use std::cell::{Cell, RefCell};
use geom::point::Point2D;
use geom::size::TypedSize2D;
@@ -51,16 +52,16 @@ pub struct Event {
pub reflector_: Reflector,
pub current_target: Cell<Option<JS<EventTarget>>>,
pub target: Cell<Option<JS<EventTarget>>>,
- pub type_: DOMString,
- pub phase: EventPhase,
- pub canceled: bool,
- pub stop_propagation: bool,
- pub stop_immediate: bool,
- pub cancelable: bool,
- pub bubbles: bool,
- pub trusted: bool,
- pub dispatching: bool,
- pub initialized: bool,
+ type_: Untraceable<RefCell<DOMString>>,
+ pub phase: Untraceable<Cell<EventPhase>>,
+ pub canceled: Untraceable<Cell<bool>>,
+ pub stop_propagation: Untraceable<Cell<bool>>,
+ pub stop_immediate: Untraceable<Cell<bool>>,
+ pub cancelable: Untraceable<Cell<bool>>,
+ pub bubbles: Untraceable<Cell<bool>>,
+ pub trusted: Untraceable<Cell<bool>>,
+ pub dispatching: Untraceable<Cell<bool>>,
+ pub initialized: Untraceable<Cell<bool>>,
pub timestamp: u64,
}
@@ -71,16 +72,16 @@ impl Event {
reflector_: Reflector::new(),
current_target: Cell::new(None),
target: Cell::new(None),
- phase: PhaseNone,
- type_: "".to_string(),
- canceled: false,
- cancelable: true,
- bubbles: false,
- trusted: false,
- dispatching: false,
- stop_propagation: false,
- stop_immediate: false,
- initialized: false,
+ phase: Untraceable::new(Cell::new(PhaseNone)),
+ type_: Untraceable::new(RefCell::new("".to_string())),
+ canceled: Untraceable::new(Cell::new(false)),
+ cancelable: Untraceable::new(Cell::new(true)),
+ bubbles: Untraceable::new(Cell::new(false)),
+ trusted: Untraceable::new(Cell::new(false)),
+ dispatching: Untraceable::new(Cell::new(false)),
+ stop_propagation: Untraceable::new(Cell::new(false)),
+ stop_immediate: Untraceable::new(Cell::new(false)),
+ initialized: Untraceable::new(Cell::new(false)),
timestamp: time::get_time().sec as u64,
}
}
@@ -95,8 +96,8 @@ impl Event {
type_: DOMString,
can_bubble: bool,
cancelable: bool) -> Temporary<Event> {
- let mut event = Event::new_uninitialized(window).root();
- event.InitEvent(type_, can_bubble, cancelable);
+ let event = Event::new_uninitialized(window).root();
+ event.deref().InitEvent(type_, can_bubble, cancelable);
Temporary::from_rooted(&*event)
}
@@ -113,23 +114,23 @@ pub trait EventMethods {
fn GetTarget(&self) -> Option<Temporary<EventTarget>>;
fn GetCurrentTarget(&self) -> Option<Temporary<EventTarget>>;
fn DefaultPrevented(&self) -> bool;
- fn PreventDefault(&mut self);
- fn StopPropagation(&mut self);
- fn StopImmediatePropagation(&mut self);
+ fn PreventDefault(&self);
+ fn StopPropagation(&self);
+ fn StopImmediatePropagation(&self);
fn Bubbles(&self) -> bool;
fn Cancelable(&self) -> bool;
fn TimeStamp(&self) -> u64;
- fn InitEvent(&mut self, type_: DOMString, bubbles: bool, cancelable: bool);
+ fn InitEvent(&self, type_: DOMString, bubbles: bool, cancelable: bool);
fn IsTrusted(&self) -> bool;
}
impl<'a> EventMethods for JSRef<'a, Event> {
fn EventPhase(&self) -> u16 {
- self.phase as u16
+ self.phase.deref().get() as u16
}
fn Type(&self) -> DOMString {
- self.type_.clone()
+ self.type_.deref().borrow().clone()
}
fn GetTarget(&self) -> Option<Temporary<EventTarget>> {
@@ -141,56 +142,56 @@ impl<'a> EventMethods for JSRef<'a, Event> {
}
fn DefaultPrevented(&self) -> bool {
- self.canceled
+ self.canceled.deref().get()
}
- fn PreventDefault(&mut self) {
- if self.cancelable {
- self.canceled = true
+ fn PreventDefault(&self) {
+ if self.cancelable.deref().get() {
+ self.canceled.deref().set(true)
}
}
- fn StopPropagation(&mut self) {
- self.stop_propagation = true;
+ fn StopPropagation(&self) {
+ self.stop_propagation.deref().set(true);
}
- fn StopImmediatePropagation(&mut self) {
- self.stop_immediate = true;
- self.stop_propagation = true;
+ fn StopImmediatePropagation(&self) {
+ self.stop_immediate.deref().set(true);
+ self.stop_propagation.deref().set(true);
}
fn Bubbles(&self) -> bool {
- self.bubbles
+ self.bubbles.deref().get()
}
fn Cancelable(&self) -> bool {
- self.cancelable
+ self.cancelable.deref().get()
}
fn TimeStamp(&self) -> u64 {
self.timestamp
}
- fn InitEvent(&mut self,
+ fn InitEvent(&self,
type_: DOMString,
bubbles: bool,
cancelable: bool) {
- self.initialized = true;
- if self.dispatching {
+ self.initialized.deref().set(true);
+ if self.dispatching.deref().get() {
return;
}
- self.stop_propagation = false;
- self.stop_immediate = false;
- self.canceled = false;
- self.trusted = false;
+ self.stop_propagation.deref().set(false);
+ self.stop_immediate.deref().set(false);
+ self.canceled.deref().set(false);
+ self.trusted.deref().set(false);
self.target.set(None);
- self.type_ = type_;
- self.bubbles = bubbles;
- self.cancelable = cancelable;
+ *self.type_.deref().borrow_mut() = type_;
+ self.bubbles.deref().set(bubbles);
+ self.cancelable.deref().set(cancelable);
}
fn IsTrusted(&self) -> bool {
- self.trusted
+ self.trusted.deref().get()
}
}