diff options
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r-- | components/script/script_task.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs index dd5a3385ef8..696d0e10f8f 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -23,6 +23,7 @@ use dom::event::{Event, EventHelpers, EventBubbles, EventCancelable}; use dom::uievent::UIEvent; use dom::eventtarget::{EventTarget, EventTargetHelpers}; use dom::keyboardevent::KeyboardEvent; +use dom::mouseevent::MouseEvent; use dom::node::{mod, Node, NodeHelpers, NodeDamage, NodeTypeId}; use dom::window::{Window, WindowHelpers}; use dom::worker::{Worker, TrustedWorkerAddress}; @@ -1168,6 +1169,33 @@ impl ScriptTask { None => {} } + if node_address.len() > 0 { + let top_most_node = + node::from_untrusted_node_address(self.js_runtime.ptr, node_address[0]).root(); + + if let Some(ref frame) = *page.frame() { + let window = frame.window.root(); + + let x = point.x.to_i32().unwrap_or(0); + let y = point.y.to_i32().unwrap_or(0); + + let mouse_event = MouseEvent::new(*window, + "mousemove".to_string(), + true, + true, + Some(*window), + 0i32, + x, y, x, y, + false, false, false, false, + 0i16, + None).root(); + + let event: JSRef<Event> = EventCast::from_ref(*mouse_event); + let target: JSRef<EventTarget> = EventTargetCast::from_ref(*top_most_node); + target.dispatch_event(event); + } + } + for node_address in node_address.iter() { let temp_node = node::from_untrusted_node_address(self.js_runtime.ptr, *node_address); |