diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2017-12-14 22:39:30 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-12-21 17:42:22 +0000 |
commit | 8cab1238d6ea14fa6a61ed4e0c5d39ccd0736ec2 (patch) | |
tree | 79f0a9f1e95dc80ba9b0d5cfaab9edddf27ec73f /Source/WebCore/platform/qt/PlatformKeyboardEventQt.cpp | |
parent | 35655d5f4bad248ead1700b59c381cc568b4e98b (diff) |
Import WebKit commit 3b024218447b7838f08ccd8cf2c8515387ae41c2
Change-Id: I0698c3862a53268111308c191c45167e36898dbb
Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/WebCore/platform/qt/PlatformKeyboardEventQt.cpp')
-rw-r--r-- | Source/WebCore/platform/qt/PlatformKeyboardEventQt.cpp | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/Source/WebCore/platform/qt/PlatformKeyboardEventQt.cpp b/Source/WebCore/platform/qt/PlatformKeyboardEventQt.cpp index a0e67e494..2e667e2da 100644 --- a/Source/WebCore/platform/qt/PlatformKeyboardEventQt.cpp +++ b/Source/WebCore/platform/qt/PlatformKeyboardEventQt.cpp @@ -808,6 +808,7 @@ static bool isVirtualKeyCodeRepresentingCharacter(int code) } } +template<bool unmodified> static String keyTextForKeyEvent(const QKeyEvent* event) { switch (event->key()) { @@ -820,6 +821,53 @@ static String keyTextForKeyEvent(const QKeyEvent* event) case Qt::Key_Enter: if (event->text().isNull()) return ASCIILiteral("\r"); + break; + +// Workaround for broken accesskey when QKeyEvent has modifier, see QTBUG-64891 +#define MAKE_TEXT_FOR_KEY(QtKey, Character) \ + case Qt::Key_##QtKey: \ + if (unmodified && event->text().isNull()) \ + return ASCIILiteral(#Character); \ + break; + + MAKE_TEXT_FOR_KEY(0, 0); + MAKE_TEXT_FOR_KEY(1, 1); + MAKE_TEXT_FOR_KEY(2, 2); + MAKE_TEXT_FOR_KEY(3, 3); + MAKE_TEXT_FOR_KEY(4, 4); + MAKE_TEXT_FOR_KEY(5, 5); + MAKE_TEXT_FOR_KEY(6, 6); + MAKE_TEXT_FOR_KEY(7, 7); + MAKE_TEXT_FOR_KEY(8, 8); + MAKE_TEXT_FOR_KEY(9, 9); + MAKE_TEXT_FOR_KEY(A, a); + MAKE_TEXT_FOR_KEY(B, b); + MAKE_TEXT_FOR_KEY(C, c); + MAKE_TEXT_FOR_KEY(D, d); + MAKE_TEXT_FOR_KEY(E, e); + MAKE_TEXT_FOR_KEY(F, f); + MAKE_TEXT_FOR_KEY(G, g); + MAKE_TEXT_FOR_KEY(H, h); + MAKE_TEXT_FOR_KEY(I, i); + MAKE_TEXT_FOR_KEY(J, j); + MAKE_TEXT_FOR_KEY(K, k); + MAKE_TEXT_FOR_KEY(L, l); + MAKE_TEXT_FOR_KEY(M, m); + MAKE_TEXT_FOR_KEY(N, n); + MAKE_TEXT_FOR_KEY(O, o); + MAKE_TEXT_FOR_KEY(P, p); + MAKE_TEXT_FOR_KEY(Q, q); + MAKE_TEXT_FOR_KEY(R, r); + MAKE_TEXT_FOR_KEY(S, s); + MAKE_TEXT_FOR_KEY(T, t); + MAKE_TEXT_FOR_KEY(U, u); + MAKE_TEXT_FOR_KEY(V, v); + MAKE_TEXT_FOR_KEY(W, w); + MAKE_TEXT_FOR_KEY(X, x); + MAKE_TEXT_FOR_KEY(Y, y); + MAKE_TEXT_FOR_KEY(Z, z); + +#undef MAKE_TEXT_FOR_KEY } return event->text(); } @@ -840,8 +888,8 @@ PlatformKeyboardEvent::PlatformKeyboardEvent(QKeyEvent* event, bool useNativeVir m_modifiers |= MetaKey; m_useNativeVirtualKeyAsDOMKey = useNativeVirtualKeyAsDOMKey; - m_text = keyTextForKeyEvent(event); - m_unmodifiedText = m_text; // FIXME: not correct + m_text = keyTextForKeyEvent<false>(event); + m_unmodifiedText = keyTextForKeyEvent<true>(event); m_keyIdentifier = keyIdentifierForQtKeyCode(event->key()); m_autoRepeat = event->isAutoRepeat(); m_isKeypad = (state & Qt::KeypadModifier); |