Sending key events through script task before processing them in the compositor.

Fixes #4163
This commit is contained in:
Nathan E. Egge 2014-12-12 10:19:04 -05:00
parent f451005f4f
commit b0552cb98e
10 changed files with 131 additions and 66 deletions

View file

@ -505,11 +505,12 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLInputElement> {
} else if "keydown" == event.Type().as_slice() && !event.DefaultPrevented() &&
(self.input_type.get() == InputText || self.input_type.get() == InputPassword) {
let keyevent: Option<JSRef<KeyboardEvent>> = KeyboardEventCast::to_ref(event);
keyevent.map(|event| {
match self.textinput.borrow_mut().handle_keydown(event) {
keyevent.map(|keyevent| {
match self.textinput.borrow_mut().handle_keydown(keyevent) {
TriggerDefaultAction => (),
DispatchInput => {
self.force_relayout();
event.PreventDefault();
}
Nothing => (),
}

View file

@ -946,6 +946,10 @@ impl ScriptTask {
// TODO: if keypress event is canceled, prevent firing input events
}
if !prevented {
self.compositor.borrow_mut().send_key_event(key, state, modifiers);
}
// 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