aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_task.rs
diff options
context:
space:
mode:
authorMatt McCoy <mattnenterprise@yahoo.com>2014-12-23 17:43:17 -0500
committerMatt McCoy <mattnenterprise@yahoo.com>2014-12-23 17:49:03 -0500
commit75be44e7442daaa66e2c5bcd59af1e7c63355477 (patch)
treea11612270d77d183e67d36c0b227102d49e74698 /components/script/script_task.rs
parentb83b4932dac9c0f4fbd6ad6a5b5a0232362c504b (diff)
downloadservo-75be44e7442daaa66e2c5bcd59af1e7c63355477.tar.gz
servo-75be44e7442daaa66e2c5bcd59af1e7c63355477.zip
This fixes #4259. Dispatching the mousemove event for the top most node when the mouse moves while on top of it
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r--components/script/script_task.rs28
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);