aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/page.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-02-23 19:18:51 -0700
committerbors-servo <metajack+bors@gmail.com>2015-02-23 19:18:51 -0700
commit576158d08deae2d87bde351548cbeb77590a34dc (patch)
tree505687411515fc43f4e8e04c9360b9070f63a4c4 /components/script/page.rs
parent9a5970cceacb40a742a3f34292ad6bf5fa56c01f (diff)
parent451512aa297e6de8dd6c3b272df4a70a4862e9f1 (diff)
downloadservo-576158d08deae2d87bde351548cbeb77590a34dc.tar.gz
servo-576158d08deae2d87bde351548cbeb77590a34dc.zip
auto merge of #4959 : glennw/servo/fix-hover, r=jdm
Specifically: - Use inclusive_ancestors instead of ancestors, to detect hover on elements like divs. - Send the mousemove event after all the hover states have been set correctly. - Correctly handle removing hover state from elements when mouse is not over any elements. - Correctly detect when a reflow is required (previous code failed in several edge cases).
Diffstat (limited to 'components/script/page.rs')
-rw-r--r--components/script/page.rs28
1 files changed, 14 insertions, 14 deletions
diff --git a/components/script/page.rs b/components/script/page.rs
index b369a5e3337..c7ea2e44bec 100644
--- a/components/script/page.rs
+++ b/components/script/page.rs
@@ -436,23 +436,23 @@ impl Page {
address
}
- pub fn get_nodes_under_mouse(&self, point: &Point2D<f32>) -> Option<Vec<UntrustedNodeAddress>> {
+ pub fn get_nodes_under_mouse(&self, point: &Point2D<f32>) -> Vec<UntrustedNodeAddress> {
+ let mut results = vec!();
let frame = self.frame();
let document = frame.as_ref().unwrap().document.root();
- let root = match document.r().GetDocumentElement().root() {
- None => return None,
- Some(root) => root,
- };
- let root: JSRef<Node> = NodeCast::from_ref(root.r());
- let address = match self.layout().mouse_over(root.to_trusted_node_address(), *point) {
- Ok(MouseOverResponse(node_address)) => {
- Some(node_address)
+ match document.r().GetDocumentElement().root() {
+ Some(root) => {
+ let root: JSRef<Node> = NodeCast::from_ref(root.r());
+ match self.layout().mouse_over(root.to_trusted_node_address(), *point) {
+ Ok(MouseOverResponse(node_addresses)) => {
+ results = node_addresses;
+ }
+ Err(()) => {}
+ };
}
- Err(()) => {
- None
- }
- };
- address
+ None => {}
+ }
+ results
}
}