servo: Merge #11950 - Support non-QWERTY keyboards (from jdm:keylayout2); r=emilio
Using the ReceivedCharacter event from glutin, we can obtain the actual key characters that the user is pressing and releasing. This gets passed to the script thread along with the physical key data, since KeyboardEvent needs both pieces of information, where they get merged into a single logical key that gets processed by clients like TextInput without any special changes. Tested by switching my macbook keyboard to dvorak and looking at the output of keypress/keyup/keydown event listeners, as well as playing with tests/html/textarea.html. Non-content keybindings like reload work as expected, too - the remapped keybinding triggers the reload action. --- - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #4144 - [X] These changes do not require tests because I can't think of a way to test remapped keyboard input Fixes #11991. Source-Repo: https://github.com/servo/servo Source-Revision: 68fb9ebc413f9cfc1ad4ca578d904c164836db74
This commit is contained in:
@@ -282,7 +282,7 @@ pub enum CompositorEvent {
|
||||
/// Touchpad pressure event
|
||||
TouchpadPressureEvent(Point2D<f32>, f32, TouchpadPressurePhase),
|
||||
/// A key was pressed.
|
||||
KeyEvent(Key, KeyState, KeyModifiers),
|
||||
KeyEvent(Option<char>, Key, KeyState, KeyModifiers),
|
||||
}
|
||||
|
||||
/// Touchpad pressure phase for TouchpadPressureEvent.
|
||||
@@ -586,7 +586,7 @@ pub enum ConstellationMsg {
|
||||
/// Query the constellation to see if the current compositor output is stable
|
||||
IsReadyToSaveImage(HashMap<PipelineId, Epoch>),
|
||||
/// Inform the constellation of a key event.
|
||||
KeyEvent(Key, KeyState, KeyModifiers),
|
||||
KeyEvent(Option<char>, Key, KeyState, KeyModifiers),
|
||||
/// Request to load a page.
|
||||
LoadUrl(PipelineId, LoadData),
|
||||
/// Request to navigate a frame.
|
||||
|
||||
@@ -103,7 +103,7 @@ pub enum ScriptMsg {
|
||||
/// https://html.spec.whatwg.org/multipage/#document.title
|
||||
SetTitle(PipelineId, Option<String>),
|
||||
/// Send a key event
|
||||
SendKeyEvent(Key, KeyState, KeyModifiers),
|
||||
SendKeyEvent(Option<char>, Key, KeyState, KeyModifiers),
|
||||
/// Get Window Informations size and position
|
||||
GetClientWindow(IpcSender<(Size2D<u32>, Point2D<i32>)>),
|
||||
/// Move the window to a point
|
||||
|
||||
Reference in New Issue
Block a user