diff options
author | Keegan McAllister <kmcallister@mozilla.com> | 2014-11-03 17:21:18 -0800 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2014-11-13 12:53:54 -0500 |
commit | 642a3592c7ea1b82e3a3a660370b9871aa5b5e96 (patch) | |
tree | cc8ad346f90ceae09fe30d2a14a22d47b7c1e387 /components/script/script_task.rs | |
parent | 89a27dd11a5767423535ec0610e2cb560c2bb3a3 (diff) | |
download | servo-642a3592c7ea1b82e3a3a660370b9871aa5b5e96.tar.gz servo-642a3592c7ea1b82e3a3a660370b9871aa5b5e96.zip |
Fix interfaces test
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r-- | components/script/script_task.rs | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 5ed9023b5e5..087e3fdf043 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -9,6 +9,7 @@ use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::DocumentBinding::{DocumentMethods, DocumentReadyStateValues}; use dom::bindings::codegen::Bindings::DOMRectBinding::DOMRectMethods; use dom::bindings::codegen::Bindings::ElementBinding::ElementMethods; +use dom::bindings::codegen::Bindings::EventBinding::EventMethods; use dom::bindings::codegen::Bindings::EventTargetBinding::EventTargetMethods; use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::codegen::InheritTypes::{EventTargetCast, NodeCast, EventCast, ElementCast}; @@ -950,19 +951,25 @@ impl ScriptTask { let props = KeyboardEvent::key_properties(key, modifiers); - let event = KeyboardEvent::new(*window, ev_type, true, true, Some(*window), 0, - props.key.to_string(), props.code.to_string(), props.location, - is_repeating, is_composing, ctrl, alt, shift, meta, - None, props.key_code).root(); - let _ = target.DispatchEvent(EventCast::from_ref(*event)); - - if state != Released && props.is_printable() { + let keyevent = KeyboardEvent::new(*window, ev_type, true, true, Some(*window), 0, + props.key.to_string(), props.code.to_string(), + props.location, is_repeating, is_composing, + ctrl, alt, shift, meta, + None, props.key_code).root(); + let event = EventCast::from_ref(*keyevent); + let _ = target.DispatchEvent(event); + + // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#keys-cancelable-keys + if state != Released && props.is_printable() && !event.DefaultPrevented() { + // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#keypress-event-order let event = KeyboardEvent::new(*window, "keypress".to_string(), true, true, Some(*window), 0, props.key.to_string(), props.code.to_string(), props.location, is_repeating, is_composing, ctrl, alt, shift, meta, props.char_code, 0).root(); let _ = target.DispatchEvent(EventCast::from_ref(*event)); + + // TODO: if keypress event is canceled, prevent firing input events } window.flush_layout(); |