From 2a2c7e18c00920e9c943e5fca33b593a2a7f76fa Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Wed, 22 Jul 2015 08:17:57 +1000 Subject: [PATCH 1/3] Set detail field to be 1 by default for mouse events. The spec says this should be "A count of consecutive clicks that happened in a short amount of time, incremented by one." This change matches the typical behaviour in FF. --- components/script/dom/document.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 69575884afe..9df4e02e6e6 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -650,7 +650,7 @@ impl<'a> DocumentHelpers<'a> for &'a Document { EventBubbles::Bubbles, EventCancelable::Cancelable, Some(window.r()), - 0i32, + 1i32, x, y, x, y, false, false, false, false, 0i16, From 2e074ce452e3c9ffcf9accbb6455130272a857ad Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Wed, 22 Jul 2015 08:20:06 +1000 Subject: [PATCH 2/3] Implement mouseevent.which (needed for enyojs sampler). --- components/script/dom/mouseevent.rs | 14 ++++++++++++++ components/script/dom/webidls/MouseEvent.webidl | 3 +++ components/script_traits/lib.rs | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs index 44e6422ff1e..9e0b7119326 100644 --- a/components/script/dom/mouseevent.rs +++ b/components/script/dom/mouseevent.rs @@ -6,6 +6,7 @@ use dom::bindings::codegen::Bindings::MouseEventBinding; use dom::bindings::codegen::Bindings::MouseEventBinding::MouseEventMethods; use dom::bindings::codegen::Bindings::UIEventBinding::UIEventMethods; use dom::bindings::codegen::InheritTypes::{EventCast, UIEventCast, MouseEventDerived}; +use dom::bindings::error::Error::NotSupported; use dom::bindings::error::Fallible; use dom::bindings::global::GlobalRef; use dom::bindings::js::{JS, MutNullableHeap, Root, RootedReference}; @@ -14,6 +15,7 @@ use dom::event::{Event, EventTypeId, EventBubbles, EventCancelable}; use dom::eventtarget::EventTarget; use dom::uievent::UIEvent; use dom::window::Window; +use util::opts; use util::str::DOMString; use std::cell::Cell; use std::default::Default; @@ -154,6 +156,18 @@ impl<'a> MouseEventMethods for &'a MouseEvent { self.related_target.get().map(Root::from_rooted) } + // See discussion at: + // - https://github.com/servo/servo/issues/6643 + // - https://bugzilla.mozilla.org/show_bug.cgi?id=1186125 + // This returns the same result as current gecko. + fn GetWhich(self) -> Fallible { + if opts::experimental_enabled() { + Ok((self.button.get() + 1) as i32) + } else { + Err(NotSupported) + } + } + fn InitMouseEvent(self, typeArg: DOMString, canBubbleArg: bool, diff --git a/components/script/dom/webidls/MouseEvent.webidl b/components/script/dom/webidls/MouseEvent.webidl index a46a44938ca..a673cd60523 100644 --- a/components/script/dom/webidls/MouseEvent.webidl +++ b/components/script/dom/webidls/MouseEvent.webidl @@ -19,6 +19,9 @@ interface MouseEvent : UIEvent { // Introduced in DOM Level 3 //readonly attribute unsigned short buttons; //boolean getModifierState (DOMString keyArg); + + [Throws] + readonly attribute long which; }; // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#idl-def-MouseEventInit diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index 9c59de58f28..65f842f7350 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -45,7 +45,7 @@ use euclid::rect::Rect; /// The address of a node. Layout sends these back. They must be validated via /// `from_untrusted_node_address` before they can be used, because we do not trust layout. #[allow(raw_pointer_derive)] -#[derive(Copy, Clone)] +#[derive(Copy, Clone, Debug)] pub struct UntrustedNodeAddress(pub *const c_void); unsafe impl Send for UntrustedNodeAddress {} From d2600e66fba716bd09ff1304de0abd1d0135787d Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Thu, 23 Jul 2015 09:13:09 +1000 Subject: [PATCH 3/3] Address review comments --- components/script/dom/document.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 9df4e02e6e6..512d6b1c708 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -645,12 +645,13 @@ impl<'a> DocumentHelpers<'a> for &'a Document { // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#event-type-click let x = point.x as i32; let y = point.y as i32; + let clickCount = 1; let event = MouseEvent::new(window.r(), mouse_event_type_string, EventBubbles::Bubbles, EventCancelable::Cancelable, Some(window.r()), - 1i32, + clickCount, x, y, x, y, false, false, false, false, 0i16,