aboutsummaryrefslogtreecommitdiffstats
path: root/src/servo/engine.rs
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-10-14 03:12:22 -0700
committerBrian Anderson <banderson@mozilla.com>2012-10-14 12:16:18 -0700
commita06d45f2a52443b53117c81c0aff30ef86aeeab2 (patch)
treee1b35333d1e81c6d1a32080725f803882de9e9ab /src/servo/engine.rs
parentbee47744a3f3da087e1e4f0b5aa9dadb8d123a8f (diff)
downloadservo-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.rs14
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,