Use keyboard-types crate

Have embedders send DOM keys to servo and use a strongly typed KeyboardEvent
from the W3C UI Events spec. All keyboard handling now uses the new types.

Introduce a ShortcutMatcher to recognize key bindings. Shortcuts are now
recognized in a uniform way.

Updated the winit port.
Updated webdriver integration.

part of #20331
This commit is contained in:
Pyfisch 2018-10-06 17:35:45 +02:00
parent 76ddbe4d7a
commit 0ccaa7e1a9
35 changed files with 762 additions and 1604 deletions

View file

@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
extern crate ipc_channel;
extern crate keyboard_types;
#[macro_use]
extern crate lazy_static;
#[macro_use]
@ -18,7 +19,8 @@ extern crate webrender_api;
pub mod resources;
use ipc_channel::ipc::IpcSender;
use msg::constellation_msg::{InputMethodType, Key, KeyModifiers, KeyState, TopLevelBrowsingContextId};
use keyboard_types::KeyboardEvent;
use msg::constellation_msg::{InputMethodType, TopLevelBrowsingContextId};
use servo_channel::{Receiver, Sender};
use servo_url::ServoUrl;
use std::fmt::{Debug, Error, Formatter};
@ -93,7 +95,7 @@ pub enum EmbedderMsg {
/// Wether or not to unload a document
AllowUnload(IpcSender<bool>),
/// Sends an unconsumed key event back to the embedder.
KeyEvent(Option<char>, Key, KeyState, KeyModifiers),
Keyboard(KeyboardEvent),
/// Changes the cursor.
SetCursor(CursorKind),
/// A favicon was detected
@ -134,7 +136,7 @@ impl Debug for EmbedderMsg {
EmbedderMsg::Alert(..) => write!(f, "Alert"),
EmbedderMsg::AllowUnload(..) => write!(f, "AllowUnload"),
EmbedderMsg::AllowNavigation(..) => write!(f, "AllowNavigation"),
EmbedderMsg::KeyEvent(..) => write!(f, "KeyEvent"),
EmbedderMsg::Keyboard(..) => write!(f, "Keyboard"),
EmbedderMsg::SetCursor(..) => write!(f, "SetCursor"),
EmbedderMsg::NewFavicon(..) => write!(f, "NewFavicon"),
EmbedderMsg::HeadParsed => write!(f, "HeadParsed"),