This fixes #4259. Dispatching the mousemove event for the top most node when the mouse moves while on top of it

This commit is contained in:
Matt McCoy 2014-12-23 17:43:17 -05:00
parent b83b4932da
commit 75be44e744

View file

@ -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);