diff options
author | Brian Anderson <banderson@mozilla.com> | 2012-10-14 03:12:22 -0700 |
---|---|---|
committer | Brian Anderson <banderson@mozilla.com> | 2012-10-14 12:16:18 -0700 |
commit | a06d45f2a52443b53117c81c0aff30ef86aeeab2 (patch) | |
tree | e1b35333d1e81c6d1a32080725f803882de9e9ab /src/servo/engine.rs | |
parent | bee47744a3f3da087e1e4f0b5aa9dadb8d123a8f (diff) | |
download | servo-a06d45f2a52443b53117c81c0aff30ef86aeeab2.tar.gz servo-a06d45f2a52443b53117c81c0aff30ef86aeeab2.zip |
Refactor how dom events are propagated
There is no longer an out-of-place add_event_listener method on Compositor.
Instead the creator of Engine sets of the dom (Port, SharedChan) pair and
distributes a channel to OSMain and the Port to ContentTask.
Diffstat (limited to 'src/servo/engine.rs')
-rw-r--r-- | src/servo/engine.rs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/servo/engine.rs b/src/servo/engine.rs index 6ec411ac55f..b7a5d5a4d82 100644 --- a/src/servo/engine.rs +++ b/src/servo/engine.rs @@ -12,6 +12,8 @@ use std::net::url::Url; use resource::image_cache_task; use image_cache_task::{ImageCacheTask, image_cache_task, ImageCacheTaskClient}; use pipes::{Port, Chan}; +use dom::event::Event; +use std::cell::Cell; pub type EngineTask = comm::Chan<Msg>; @@ -31,12 +33,20 @@ struct Engine<C:Compositor Send Copy> { } fn Engine<C:Compositor Send Copy>(compositor: C, + dom_event_port: pipes::Port<Event>, + dom_event_chan: pipes::SharedChan<Event>, resource_task: ResourceTask, image_cache_task: ImageCacheTask) -> EngineTask { - do spawn_listener::<Msg> |request| { + + let dom_event_port = Cell(dom_event_port); + let dom_event_chan = Cell(dom_event_chan); + + do spawn_listener::<Msg> |request, move dom_event_port, move dom_event_chan| { let render_task = RenderTask(compositor); let layout_task = LayoutTask(render_task, image_cache_task.clone()); - let content_task = ContentTask(layout_task, compositor, resource_task, image_cache_task.clone()); + let content_task = ContentTask(layout_task, + dom_event_port.take(), dom_event_chan.take(), + resource_task, image_cache_task.clone()); Engine { request_port: request, |