From 08cac68d5a481c3c612fff1e9a87612871f95f5f Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Mon, 29 Sep 2014 02:14:21 -0400 Subject: [PATCH] Check if the immediate node is an element before looking at ancestors when clicking, and flush pending layout changes after dispatching the event. --- components/script/script_task.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 88c84ef5b74..a8c7901bc77 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -928,9 +928,14 @@ impl ScriptTask { let temp_node = node::from_untrusted_node_address( - self.js_runtime.deref().ptr, node_address); + self.js_runtime.deref().ptr, node_address).root(); + + let maybe_node = if !temp_node.is_element() { + temp_node.ancestors().find(|node| node.is_element()) + } else { + Some(*temp_node) + }; - let maybe_node = temp_node.root().ancestors().find(|node| node.is_element()); match maybe_node { Some(node) => { debug!("clicked on {:s}", node.debug_str()); @@ -945,6 +950,8 @@ impl ScriptTask { true, true).root(); let eventtarget: JSRef = EventTargetCast::from_ref(node); let _ = eventtarget.dispatch_event_with_target(None, *event); + + window.flush_layout(ReflowForDisplay); } None => {} }