diff options
author | Connor Brewster <connor.brewster@eagles.oc.edu> | 2016-07-11 22:21:45 -0600 |
---|---|---|
committer | Connor Brewster <connor.brewster@eagles.oc.edu> | 2016-07-11 22:21:45 -0600 |
commit | afc0ccb48d03cfacec06b9c6d6be3626b46ff793 (patch) | |
tree | 9bd3647f9650386dcb6e36a902dc938d1e07eb95 /components/script/dom/event.rs | |
parent | 9b01a4cc97af29b81f92a403992d0498d4290f4f (diff) | |
download | servo-afc0ccb48d03cfacec06b9c6d6be3626b46ff793.tar.gz servo-afc0ccb48d03cfacec06b9c6d6be3626b46ff793.zip |
Add event runnables
Make tasks a wrapper over runnables
Diffstat (limited to 'components/script/dom/event.rs')
-rw-r--r-- | components/script/dom/event.rs | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs index 9174fa2cb3d..da7664e0e19 100644 --- a/components/script/dom/event.rs +++ b/components/script/dom/event.rs @@ -8,9 +8,11 @@ use dom::bindings::codegen::Bindings::EventBinding::{EventConstants, EventMethod use dom::bindings::error::Fallible; use dom::bindings::global::GlobalRef; use dom::bindings::js::{JS, MutNullableHeap, Root}; +use dom::bindings::refcounted::Trusted; use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::bindings::str::DOMString; use dom::eventtarget::EventTarget; +use script_thread::Runnable; use std::cell::Cell; use std::default::Default; use string_cache::Atom; @@ -26,7 +28,7 @@ pub enum EventPhase { Bubbling = EventConstants::BUBBLING_PHASE, } -#[derive(PartialEq, HeapSizeOf)] +#[derive(PartialEq, HeapSizeOf, Copy, Clone)] pub enum EventBubbles { Bubbles, DoesNotBubble @@ -50,7 +52,7 @@ impl From<bool> for EventBubbles { } } -#[derive(PartialEq, HeapSizeOf)] +#[derive(PartialEq, HeapSizeOf, Copy, Clone)] pub enum EventCancelable { Cancelable, NotCancelable @@ -297,3 +299,35 @@ impl Event { target.dispatch_event(self) } } + +// https://dom.spec.whatwg.org/#concept-event-fire +pub struct EventRunnable { + pub target: Trusted<EventTarget>, + pub name: Atom, + pub bubbles: EventBubbles, + pub cancelable: EventCancelable, +} + +impl Runnable for EventRunnable { + fn name(&self) -> &'static str { "EventRunnable" } + + fn handler(self: Box<EventRunnable>) { + let target = self.target.root(); + target.fire_event(&*self.name, self.bubbles, self.cancelable); + } +} + +// https://html.spec.whatwg.org/multipage/#fire-a-simple-event +pub struct SimpleEventRunnable { + pub target: Trusted<EventTarget>, + pub name: Atom, +} + +impl Runnable for SimpleEventRunnable { + fn name(&self) -> &'static str { "SimpleEventRunnable" } + + fn handler(self: Box<SimpleEventRunnable>) { + let target = self.target.root(); + target.fire_simple_event(&*self.name); + } +} |