Implement MutNullableJS for mutable, nullable member pointers to DOM objects.

This commit is contained in:
Josh Matthews 2014-09-30 16:39:31 +02:00 committed by Ms2ger
parent f73e508821
commit 54fcab61d6
11 changed files with 171 additions and 109 deletions

View file

@ -9,7 +9,7 @@ use dom::bindings::codegen::InheritTypes::{UIEventCast, MouseEventDerived};
use dom::bindings::error::Fallible;
use dom::bindings::global::GlobalRef;
use dom::bindings::global;
use dom::bindings::js::{JS, JSRef, RootedReference, Temporary, OptionalSettable};
use dom::bindings::js::{MutNullableJS, JSRef, RootedReference, Temporary, OptionalSettable};
use dom::bindings::trace::Traceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::event::{Event, MouseEventTypeId};
@ -18,6 +18,7 @@ use dom::uievent::UIEvent;
use dom::window::Window;
use servo_util::str::DOMString;
use std::cell::Cell;
use std::default::Default;
#[jstraceable]
#[must_root]
@ -32,7 +33,7 @@ pub struct MouseEvent {
pub alt_key: Traceable<Cell<bool>>,
pub meta_key: Traceable<Cell<bool>>,
pub button: Traceable<Cell<i16>>,
pub related_target: Cell<Option<JS<EventTarget>>>
pub related_target: MutNullableJS<EventTarget>
}
impl MouseEventDerived for Event {
@ -54,7 +55,7 @@ impl MouseEvent {
alt_key: Traceable::new(Cell::new(false)),
meta_key: Traceable::new(Cell::new(false)),
button: Traceable::new(Cell::new(0)),
related_target: Cell::new(None)
related_target: Default::default(),
}
}
@ -142,7 +143,7 @@ impl<'a> MouseEventMethods for JSRef<'a, MouseEvent> {
}
fn GetRelatedTarget(self) -> Option<Temporary<EventTarget>> {
self.related_target.get().clone().map(|target| Temporary::new(target))
self.related_target.get()
}
fn InitMouseEvent(self,