diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-06-10 16:03:53 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-06-11 19:51:06 +0200 |
commit | 781299aaa69ae40ebefa27a36309e2d558314f77 (patch) | |
tree | 119ad3f73574b8733c36dbf65313add50217d72d /src/components/script | |
parent | 0b364d13b6f4eeffbaca66559016b44d26581b8f (diff) | |
download | servo-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.rs | 20 |
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); } |