aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRavi Shankar <wafflespeanut@gmail.com>2016-12-27 13:01:45 +0530
committerRavi Shankar <wafflespeanut@gmail.com>2016-12-27 15:57:23 +0530
commit08662cc64e0674b910c1579ca550afd77e559eca (patch)
tree6234a48fca1a3d199d93483e0d4f5b426a7510cc
parentb10bfeaeb6dff4031f62ee14b05102db0db53b2c (diff)
downloadservo-08662cc64e0674b910c1579ca550afd77e559eca.tar.gz
servo-08662cc64e0674b910c1579ca550afd77e559eca.zip
Allow 'keypress' event to emerge from input and textarea elements
-rw-r--r--components/script/dom/document.rs57
-rwxr-xr-xcomponents/script/dom/htmlinputelement.rs4
-rwxr-xr-xcomponents/script/dom/htmltextareaelement.rs4
3 files changed, 32 insertions, 33 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 6f8f2435311..0f427cdb069 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -13,7 +13,6 @@ use dom::bindings::codegen::Bindings::DOMRectBinding::DOMRectMethods;
use dom::bindings::codegen::Bindings::DocumentBinding;
use dom::bindings::codegen::Bindings::DocumentBinding::{DocumentMethods, DocumentReadyState};
use dom::bindings::codegen::Bindings::ElementBinding::ElementMethods;
-use dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull;
use dom::bindings::codegen::Bindings::EventHandlerBinding::OnErrorEventHandlerNonNull;
use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
@@ -41,7 +40,7 @@ use dom::documenttype::DocumentType;
use dom::domimplementation::DOMImplementation;
use dom::element::{Element, ElementCreator, ElementPerformFullscreenEnter, ElementPerformFullscreenExit};
use dom::errorevent::ErrorEvent;
-use dom::event::{Event, EventBubbles, EventCancelable};
+use dom::event::{Event, EventBubbles, EventCancelable, EventDefault};
use dom::eventdispatcher::EventStatus;
use dom::eventtarget::EventTarget;
use dom::focusevent::FocusEvent;
@@ -1308,10 +1307,10 @@ impl Document {
props.key_code);
let event = keyevent.upcast::<Event>();
event.fire(target);
- let mut prevented = event.DefaultPrevented();
+ let mut cancel_state = event.get_cancel_state();
// https://w3c.github.io/uievents/#keys-cancelable-keys
- if state != KeyState::Released && props.is_printable() && !prevented {
+ if state != KeyState::Released && props.is_printable() && cancel_state != EventDefault::Prevented {
// https://w3c.github.io/uievents/#keypress-event-order
let event = KeyboardEvent::new(&self.window,
DOMString::from("keypress"),
@@ -1334,40 +1333,40 @@ impl Document {
0);
let ev = event.upcast::<Event>();
ev.fire(target);
- prevented = ev.DefaultPrevented();
+ cancel_state = ev.get_cancel_state();
// TODO: if keypress event is canceled, prevent firing input events
}
- if !prevented {
+ if cancel_state == EventDefault::Allowed {
constellation.send(ConstellationMsg::SendKeyEvent(ch, key, state, modifiers)).unwrap();
- }
- // This behavior is unspecced
- // We are supposed to dispatch synthetic click activation for Space and/or Return,
- // however *when* we do it is up to us
- // I'm dispatching it after the key event so the script has a chance to cancel it
- // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27337
- match key {
- Key::Space if !prevented && state == KeyState::Released => {
- let maybe_elem = target.downcast::<Element>();
- if let Some(el) = maybe_elem {
- synthetic_click_activation(el,
- false,
- false,
- false,
- false,
- ActivationSource::NotFromClick)
+ // This behavior is unspecced
+ // We are supposed to dispatch synthetic click activation for Space and/or Return,
+ // however *when* we do it is up to us.
+ // Here, we're dispatching it after the key event so the script has a chance to cancel it
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27337
+ match key {
+ Key::Space if state == KeyState::Released => {
+ let maybe_elem = target.downcast::<Element>();
+ if let Some(el) = maybe_elem {
+ synthetic_click_activation(el,
+ false,
+ false,
+ false,
+ false,
+ ActivationSource::NotFromClick)
+ }
}
- }
- Key::Enter if !prevented && state == KeyState::Released => {
- let maybe_elem = target.downcast::<Element>();
- if let Some(el) = maybe_elem {
- if let Some(a) = el.as_maybe_activatable() {
- a.implicit_submission(ctrl, alt, shift, meta);
+ Key::Enter if state == KeyState::Released => {
+ let maybe_elem = target.downcast::<Element>();
+ if let Some(el) = maybe_elem {
+ if let Some(a) = el.as_maybe_activatable() {
+ a.implicit_submission(ctrl, alt, shift, meta);
+ }
}
}
+ _ => (),
}
- _ => (),
}
self.window.reflow(ReflowGoal::ForDisplay,
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs
index eb344ef0a79..8784c1f39df 100755
--- a/components/script/dom/htmlinputelement.rs
+++ b/components/script/dom/htmlinputelement.rs
@@ -1117,11 +1117,11 @@ impl VirtualMethods for HTMLInputElement {
}
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
- event.PreventDefault();
+ event.mark_as_handled();
}
RedrawSelection => {
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
- event.PreventDefault();
+ event.mark_as_handled();
}
Nothing => (),
}
diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs
index fd5b42fa25c..74db028859a 100755
--- a/components/script/dom/htmltextareaelement.rs
+++ b/components/script/dom/htmltextareaelement.rs
@@ -415,11 +415,11 @@ impl VirtualMethods for HTMLTextAreaElement {
}
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
- event.PreventDefault();
+ event.mark_as_handled();
}
KeyReaction::RedrawSelection => {
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
- event.PreventDefault();
+ event.mark_as_handled();
}
KeyReaction::Nothing => (),
}