summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJüri Valdmann <juri.valdmann@qt.io>2018-07-30 12:46:37 +0200
committerJüri Valdmann <juri.valdmann@qt.io>2018-08-27 14:30:08 +0000
commite9e79c3f90eed42843b9fc5f7c9dfa40f4cb46a7 (patch)
treeb7b0c7d026338d390ce665e2ec5fd09c272c3b4f /src
parentdabf39eb6751725224e2d66e1392a590de0527a4 (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.cpp13
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)));