Changeset 153884 in webkit
- Timestamp:
- Aug 9, 2013 5:11:20 AM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r153883 r153884 1 2013-08-09 Arunprasad Rajkumar <arurajku@cisco.com> 2 3 [Qt] QtWebKit should allow sending domain specific keycode to HTML applications 4 https://bugs.webkit.org/show_bug.cgi?id=118445 5 6 Reviewed by Allan Sandfeld Jensen. 7 8 No new test required, it is covered by QtWebKit API test. 9 10 This fix allows sending QKeyEvent::nativeVirtualKey as the DOM KeyboardEvent keyCode value instead 11 of Windows virtual key code. It can be enabled/disabled using "_q_useNativeVirtualKeyAsDOMKey" 12 dynamic property present in QWebPage. 13 14 * platform/PlatformKeyboardEvent.h: 15 (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): 16 * platform/qt/PlatformKeyboardEventQt.cpp: 17 (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): 18 (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent): 19 1 20 2013-08-09 Renata Hodovan <reni@webkit.org> 2 21 -
trunk/Source/WebCore/platform/PlatformKeyboardEvent.h
r153483 r153884 82 82 #if PLATFORM(QT) 83 83 , m_qtEvent(0) 84 , m_useNativeVirtualKeyAsDOMKey(false) 84 85 #endif 85 86 { … … 156 157 157 158 #if PLATFORM(QT) 158 PlatformKeyboardEvent(QKeyEvent* );159 PlatformKeyboardEvent(QKeyEvent*, bool); 159 160 QKeyEvent* qtEvent() const { return m_qtEvent; } 160 161 uint32_t nativeModifiers() const; … … 195 196 #if PLATFORM(QT) 196 197 QKeyEvent* m_qtEvent; 198 bool m_useNativeVirtualKeyAsDOMKey; 197 199 #endif 198 200 }; -
trunk/Source/WebCore/platform/qt/PlatformKeyboardEventQt.cpp
r152961 r153884 815 815 } 816 816 817 PlatformKeyboardEvent::PlatformKeyboardEvent(QKeyEvent* event )817 PlatformKeyboardEvent::PlatformKeyboardEvent(QKeyEvent* event, bool useNativeVirtualKeyAsDOMKey) 818 818 { 819 819 const int state = event->modifiers(); … … 830 830 m_modifiers |= MetaKey; 831 831 832 m_useNativeVirtualKeyAsDOMKey = useNativeVirtualKeyAsDOMKey; 832 833 m_text = keyTextForKeyEvent(event); 833 834 m_unmodifiedText = m_text; // FIXME: not correct … … 836 837 m_isKeypad = (state & Qt::KeypadModifier); 837 838 m_isSystemKey = false; 838 m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(event->key(), m_isKeypad);839 839 m_nativeVirtualKeyCode = event->nativeVirtualKey(); 840 // If QKeyEvent::nativeVirtualKey() is valid (!=0) and useNativeVirtualKeyAsDOMKey is set, 841 // then it is a special case desired by QtWebKit embedder to send domain specific keys 842 // to Web Applications intented for platforms like HbbTV,CE-HTML,OIPF,..etc. 843 if (useNativeVirtualKeyAsDOMKey && m_nativeVirtualKeyCode) 844 m_windowsVirtualKeyCode = m_nativeVirtualKeyCode; 845 else 846 m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(event->key(), m_isKeypad); 847 840 848 m_macCharCode = 0; 841 849 m_qtEvent = event; … … 859 867 general event handling sends a key press event after this disambiguation. 860 868 */ 861 if ( m_text.isEmpty() && m_windowsVirtualKeyCode && isVirtualKeyCodeRepresentingCharacter(m_windowsVirtualKeyCode))869 if (!m_useNativeVirtualKeyAsDOMKey && m_text.isEmpty() && m_windowsVirtualKeyCode && isVirtualKeyCodeRepresentingCharacter(m_windowsVirtualKeyCode)) 862 870 m_text.append(UChar(m_windowsVirtualKeyCode)); 863 871 -
trunk/Source/WebKit/qt/ChangeLog
r153880 r153884 1 2013-08-09 Arunprasad Rajkumar <arurajku@cisco.com> 2 3 [Qt] QtWebKit should allow sending domain specific keycode to HTML applications 4 https://bugs.webkit.org/show_bug.cgi?id=118445 5 6 Reviewed by Allan Sandfeld Jensen. 7 8 Added API test. 9 10 * WebCoreSupport/QWebPageAdapter.cpp: 11 (QWebPageAdapter::QWebPageAdapter): 12 (QWebPageAdapter::dynamicPropertyChangeEvent): 13 (QWebPageAdapter::handleKeyEvent): 14 * WebCoreSupport/QWebPageAdapter.h: 15 * tests/qwebpage/tst_qwebpage.cpp: 16 (tst_QWebPage::domainSpecificKeyEvent): 17 1 18 2013-08-09 Andreas Kling <akling@apple.com> 2 19 -
trunk/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp
r153782 r153884 210 210 , insideOpenCall(false) 211 211 , clickCausedFocus(false) 212 , m_useNativeVirtualKeyAsDOMKey(false) 212 213 , m_totalBytes(0) 213 214 , m_bytesReceived() … … 839 840 double interval = obj->property("_q_deadDecodedDataDeletionInterval").toDouble(); 840 841 memoryCache()->setDeadDecodedDataDeletionInterval(interval); 842 } else if (event->propertyName() == "_q_useNativeVirtualKeyAsDOMKey") { 843 m_useNativeVirtualKeyAsDOMKey = obj->property("_q_useNativeVirtualKeyAsDOMKey").toBool(); 841 844 } 842 845 } … … 1296 1299 { 1297 1300 Frame* frame = page->focusController()->focusedOrMainFrame(); 1298 return frame->eventHandler()->keyEvent( ev);1301 return frame->eventHandler()->keyEvent(PlatformKeyboardEvent(ev, m_useNativeVirtualKeyAsDOMKey)); 1299 1302 } 1300 1303 -
trunk/Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h
r153751 r153884 360 360 361 361 bool clickCausedFocus; 362 bool m_useNativeVirtualKeyAsDOMKey; 362 363 quint64 m_totalBytes; 363 364 quint64 m_bytesReceived; -
trunk/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
r153751 r153884 115 115 void contextMenuPopulatedOnce(); 116 116 void acceptNavigationRequest(); 117 void domainSpecificKeyEvent(); 117 118 void geolocationRequestJS(); 118 119 void loadFinished(); … … 284 285 } 285 286 287 void tst_QWebPage::domainSpecificKeyEvent() 288 { 289 QWebView webView; 290 webView.show(); 291 QTest::qWaitForWindowExposed(&webView); 292 293 webView.setHtml(QLatin1String("<html><head>" 294 "<script>" 295 "var receivedKeyArray = new Array();" 296 "function keyEvent(e) {" 297 "receivedKeyArray.push(e.type+':'+e.keyCode+':'+e.charCode);" 298 "};" 299 "window.onkeyup = keyEvent; window.onkeypress = keyEvent; window.onkeydown = keyEvent;" 300 "</script></head><body>test</body></html>")); 301 302 // Enable settings to use nativeVirtualKey as DOM key value. 303 webView.page()->setProperty("_q_useNativeVirtualKeyAsDOMKey", true); 304 // Simulate domain specific keyevent to WebKit by passing it as nativeVirtualKey in QKeyEvent. 305 // Qt::Key_Pause --> 0x51 306 QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_Pause, Qt::NoModifier, 0, 81, 0); 307 QApplication::sendEvent(&webView, &keyEvent); 308 keyEvent = QKeyEvent(QEvent::KeyRelease, Qt::Key_Pause, Qt::NoModifier, 0, 81, 0); 309 QApplication::sendEvent(&webView, &keyEvent); 310 const QLatin1String expectedReceivedKeyArray1("keydown:81:0,keyup:81:0"); 311 QString receivedKeyArray = webView.page()->mainFrame()->evaluateJavaScript(QLatin1String("receivedKeyArray")).toStringList().join(","); 312 QVERIFY(receivedKeyArray == expectedReceivedKeyArray1); 313 314 // Normal PC keyboard key converstion flow shouldn't be affected when sending nativeVirtual key as 0. 315 // Qt::Key_Pause --> VK_PAUSE(0x13) 316 webView.page()->mainFrame()->evaluateJavaScript(QLatin1String("receivedKeyArray = new Array()")); // Reset 317 keyEvent = QKeyEvent(QEvent::KeyPress, Qt::Key_Pause, Qt::NoModifier, 0, 0, 0); 318 QApplication::sendEvent(&webView, &keyEvent); 319 keyEvent = QKeyEvent(QEvent::KeyRelease, Qt::Key_Pause, Qt::NoModifier, 0, 0, 0); 320 QApplication::sendEvent(&webView, &keyEvent); 321 const QLatin1String expectedReceivedKeyArray2("keydown:19:0,keyup:19:0"); 322 receivedKeyArray = webView.page()->mainFrame()->evaluateJavaScript(QLatin1String("receivedKeyArray")).toStringList().join(","); 323 QVERIFY(receivedKeyArray == expectedReceivedKeyArray2); 324 325 // Negative case. 326 // Disable settings to use nativeVirtualKey as DOM key value. 327 webView.page()->setProperty("_q_useNativeVirtualKeyAsDOMKey", false); 328 // Qt::Key_Pause --> VK_PAUSE(0x13) 329 webView.page()->mainFrame()->evaluateJavaScript(QLatin1String("receivedKeyArray = new Array()")); // Reset 330 keyEvent = QKeyEvent(QEvent::KeyPress, Qt::Key_Pause, Qt::NoModifier, 0, 81, 0); 331 QApplication::sendEvent(&webView, &keyEvent); 332 keyEvent = QKeyEvent(QEvent::KeyRelease, Qt::Key_Pause, Qt::NoModifier, 0, 81, 0); 333 QApplication::sendEvent(&webView, &keyEvent); 334 const QLatin1String expectedReceivedKeyArray3("keydown:19:0,keyup:19:0"); 335 receivedKeyArray = webView.page()->mainFrame()->evaluateJavaScript(QLatin1String("receivedKeyArray")).toStringList().join(","); 336 QVERIFY(receivedKeyArray == expectedReceivedKeyArray3); 337 } 338 286 339 class JSTestPage : public QWebPage 287 340 {
Note: See TracChangeset
for help on using the changeset viewer.