aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-06-10 16:03:53 +0200
committerMs2ger <ms2ger@gmail.com>2014-06-11 19:51:06 +0200
commit781299aaa69ae40ebefa27a36309e2d558314f77 (patch)
tree119ad3f73574b8733c36dbf65313add50217d72d /src/components/script
parent0b364d13b6f4eeffbaca66559016b44d26581b8f (diff)
downloadservo-781299aaa69ae40ebefa27a36309e2d558314f77.tar.gz
servo-781299aaa69ae40ebefa27a36309e2d558314f77.zip
Use internal mutability for CustomEvent.
Diffstat (limited to 'src/components/script')
-rw-r--r--src/components/script/dom/customevent.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/components/script/dom/customevent.rs b/src/components/script/dom/customevent.rs
index 4e391cfd06c..9abd64b215e 100644
--- a/src/components/script/dom/customevent.rs
+++ b/src/components/script/dom/customevent.rs
@@ -14,10 +14,12 @@ use js::jsapi::JSContext;
use js::jsval::{JSVal, NullValue};
use servo_util::str::DOMString;
+use std::cell::Cell;
+
#[deriving(Encodable)]
pub struct CustomEvent {
event: Event,
- detail: Traceable<JSVal>
+ detail: Traceable<Cell<Traceable<JSVal>>>,
}
impl CustomEventDerived for Event {
@@ -28,7 +30,7 @@ impl CustomEventDerived for Event {
pub trait CustomEventMethods {
fn Detail(&self, _cx: *mut JSContext) -> JSVal;
- fn InitCustomEvent(&mut self, _cx: *mut JSContext,
+ fn InitCustomEvent(&self, _cx: *mut JSContext,
type_: DOMString, can_bubble: bool,
cancelable: bool, detail: JSVal);
}
@@ -37,7 +39,7 @@ impl CustomEvent {
pub fn new_inherited(type_id: EventTypeId) -> CustomEvent {
CustomEvent {
event: Event::new_inherited(type_id),
- detail: Traceable::new(NullValue())
+ detail: Traceable::new(Cell::new(Traceable::new(NullValue()))),
}
}
@@ -47,8 +49,8 @@ impl CustomEvent {
CustomEventBinding::Wrap)
}
pub fn new(window: &JSRef<Window>, type_: DOMString, bubbles: bool, cancelable: bool, detail: JSVal) -> Temporary<CustomEvent> {
- let mut ev = CustomEvent::new_uninitialized(window).root();
- ev.InitCustomEvent(window.deref().get_cx(), type_, bubbles, cancelable, detail);
+ let ev = CustomEvent::new_uninitialized(window).root();
+ ev.deref().InitCustomEvent(window.deref().get_cx(), type_, bubbles, cancelable, detail);
Temporary::from_rooted(&*ev)
}
pub fn Constructor(owner: &JSRef<Window>,
@@ -60,16 +62,16 @@ impl CustomEvent {
impl<'a> CustomEventMethods for JSRef<'a, CustomEvent> {
fn Detail(&self, _cx: *mut JSContext) -> JSVal {
- self.detail.deref().clone()
+ *self.detail.deref().get()
}
- fn InitCustomEvent(&mut self,
- _cx: *mut JSContext,
+ fn InitCustomEvent(&self,
+ _cx: *mut JSContext,
type_: DOMString,
can_bubble: bool,
cancelable: bool,
detail: JSVal) {
- self.detail = Traceable::new(detail);
+ self.detail.deref().set(Traceable::new(detail));
let event: &JSRef<Event> = EventCast::from_ref(self);
event.InitEvent(type_, can_bubble, cancelable);
}