diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2018-07-30 12:46:37 +0200 |
---|---|---|
committer | Jüri Valdmann <juri.valdmann@qt.io> | 2018-08-27 14:30:08 +0000 |
commit | e9e79c3f90eed42843b9fc5f7c9dfa40f4cb46a7 (patch) | |
tree | b7b0c7d026338d390ce665e2ec5fd09c272c3b4f /src | |
parent | dabf39eb6751725224e2d66e1392a590de0527a4 (diff) |
WebEventFactory: Fix WebKeyboardEvent::dom_code on macOS
Currently this field is always computed from QKeyEvent::nativeScanCode, but this
is not correct on macOS where nativeVirtualKey should be used instead (there is
no nativeScanCode on macOS). Fix by using native_key_code which already takes
this into account.
Task-number: QTBUG-69442
Change-Id: I7c99d7d147ab68bac7ab91101de173eb04fa5c03
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/web_event_factory.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp index 16953b194..36860e2db 100644 --- a/src/core/web_event_factory.cpp +++ b/src/core/web_event_factory.cpp @@ -1459,11 +1459,14 @@ content::NativeWebKeyboardEvent WebEventFactory::toWebKeyboardEvent(QKeyEvent *e webKitEvent.windows_key_code = windowsKeyCodeForKeyEvent(qtKeyForKeyEvent(ev), ev->modifiers() & Qt::KeypadModifier); webKitEvent.dom_key = getDomKeyFromQKeyEvent(ev); - ui::DomCode domCode = ui::DomCode::NONE; - int scanCode = ev->nativeScanCode(); - if (scanCode) - domCode = ui::KeycodeConverter::NativeKeycodeToDomCode(scanCode); - webKitEvent.dom_code = static_cast<int>(domCode); + // The dom_code field should contain the USB keycode of the *physical* key + // that was pressed. Physical meaning independent of layout and modifiers. + // + // Since this information is not available from QKeyEvent in portable form, + // we try to compute it from the native key code. + if (webKitEvent.native_key_code) + webKitEvent.dom_code = static_cast<int>( + ui::KeycodeConverter::NativeKeycodeToDomCode(webKitEvent.native_key_code)); const ushort* text = ev->text().utf16(); memcpy(&webKitEvent.text, text, std::min(sizeof(webKitEvent.text), size_t(ev->text().length() * 2))); |