Changeset 109326 in webkit
- Timestamp:
- Mar 1, 2012 1:32:13 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r109322 r109326 1 2012-02-29 Simon Hausmann <simon.hausmann@nokia.com> 2 3 [Qt][WK2] QQuickWebView::event should lookup faster which events QQuickWebPage can handle 4 https://bugs.webkit.org/show_bug.cgi?id=78047 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 Replaced double-dispatch of events with direct forwarding of events from QQuickWebView::*Event to 9 QtWebPageEventHandler::handle*Event. 10 11 * UIProcess/API/qt/qquickwebview.cpp: 12 (QQuickWebView::keyPressEvent): 13 (QQuickWebView::keyReleaseEvent): 14 (QQuickWebView::inputMethodEvent): 15 (QQuickWebView::focusInEvent): 16 (QQuickWebView::focusOutEvent): 17 (QQuickWebView::touchEvent): 18 (QQuickWebView::mousePressEvent): 19 (QQuickWebView::mouseMoveEvent): 20 (QQuickWebView::mouseReleaseEvent): 21 (QQuickWebView::mouseDoubleClickEvent): 22 (QQuickWebView::wheelEvent): 23 (QQuickWebView::hoverEnterEvent): 24 (QQuickWebView::hoverMoveEvent): 25 (QQuickWebView::hoverLeaveEvent): 26 (QQuickWebView::dragMoveEvent): 27 (QQuickWebView::dragEnterEvent): 28 (QQuickWebView::dragLeaveEvent): 29 (QQuickWebView::dropEvent): 30 (QQuickWebView::event): 31 * UIProcess/qt/QtWebPageEventHandler.cpp: 32 (QtWebPageEventHandler::handleMouseMoveEvent): 33 (QtWebPageEventHandler::handleMousePressEvent): 34 (QtWebPageEventHandler::handleMouseReleaseEvent): 35 (QtWebPageEventHandler::handleWheelEvent): 36 (QtWebPageEventHandler::handleHoverLeaveEvent): 37 (QtWebPageEventHandler::handleHoverMoveEvent): 38 (QtWebPageEventHandler::handleDragEnterEvent): 39 (QtWebPageEventHandler::handleDragLeaveEvent): 40 (QtWebPageEventHandler::handleDragMoveEvent): 41 (QtWebPageEventHandler::handleDropEvent): 42 (QtWebPageEventHandler::handleKeyPressEvent): 43 (QtWebPageEventHandler::handleKeyReleaseEvent): 44 (QtWebPageEventHandler::handleFocusInEvent): 45 (QtWebPageEventHandler::handleFocusOutEvent): 46 (QtWebPageEventHandler::handleInputMethodEvent): 47 (QtWebPageEventHandler::handleTouchEvent): 48 * UIProcess/qt/QtWebPageEventHandler.h: 49 (QtWebPageEventHandler): 50 1 51 2012-03-01 Csaba Osztrogonác <ossy@webkit.org> 2 52 -
trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
r109136 r109326 1306 1306 void QQuickWebView::keyPressEvent(QKeyEvent* event) 1307 1307 { 1308 this->event(event); 1308 Q_D(QQuickWebView); 1309 d->pageView->eventHandler()->handleKeyPressEvent(event); 1309 1310 } 1310 1311 1311 1312 void QQuickWebView::keyReleaseEvent(QKeyEvent* event) 1312 1313 { 1313 this->event(event); 1314 Q_D(QQuickWebView); 1315 d->pageView->eventHandler()->handleKeyReleaseEvent(event); 1314 1316 } 1315 1317 1316 1318 void QQuickWebView::inputMethodEvent(QInputMethodEvent* event) 1317 1319 { 1318 this->event(event); 1320 Q_D(QQuickWebView); 1321 d->pageView->eventHandler()->handleInputMethodEvent(event); 1319 1322 } 1320 1323 1321 1324 void QQuickWebView::focusInEvent(QFocusEvent* event) 1322 1325 { 1323 this->event(event); 1326 Q_D(QQuickWebView); 1327 d->pageView->eventHandler()->handleFocusInEvent(event); 1324 1328 } 1325 1329 1326 1330 void QQuickWebView::focusOutEvent(QFocusEvent* event) 1327 1331 { 1328 this->event(event); 1332 Q_D(QQuickWebView); 1333 d->pageView->eventHandler()->handleFocusOutEvent(event); 1329 1334 } 1330 1335 1331 1336 void QQuickWebView::touchEvent(QTouchEvent* event) 1332 1337 { 1338 Q_D(QQuickWebView); 1333 1339 forceActiveFocus(); 1334 this->event(event);1340 d->pageView->eventHandler()->handleTouchEvent(event); 1335 1341 } 1336 1342 1337 1343 void QQuickWebView::mousePressEvent(QMouseEvent* event) 1338 1344 { 1345 Q_D(QQuickWebView); 1339 1346 forceActiveFocus(); 1340 this->event(event);1347 d->pageView->eventHandler()->handleMousePressEvent(event); 1341 1348 } 1342 1349 1343 1350 void QQuickWebView::mouseMoveEvent(QMouseEvent* event) 1344 1351 { 1345 this->event(event); 1352 Q_D(QQuickWebView); 1353 d->pageView->eventHandler()->handleMouseMoveEvent(event); 1346 1354 } 1347 1355 1348 1356 void QQuickWebView::mouseReleaseEvent(QMouseEvent* event) 1349 1357 { 1350 this->event(event); 1358 Q_D(QQuickWebView); 1359 d->pageView->eventHandler()->handleMouseReleaseEvent(event); 1351 1360 } 1352 1361 1353 1362 void QQuickWebView::mouseDoubleClickEvent(QMouseEvent* event) 1354 1363 { 1355 this->event(event); 1364 Q_D(QQuickWebView); 1365 // If a MouseButtonDblClick was received then we got a MouseButtonPress before 1366 // handleMousePressEvent will take care of double clicks. 1367 d->pageView->eventHandler()->handleMousePressEvent(event); 1356 1368 } 1357 1369 1358 1370 void QQuickWebView::wheelEvent(QWheelEvent* event) 1359 1371 { 1360 this->event(event); 1372 Q_D(QQuickWebView); 1373 d->pageView->eventHandler()->handleWheelEvent(event); 1361 1374 } 1362 1375 1363 1376 void QQuickWebView::hoverEnterEvent(QHoverEvent* event) 1364 1377 { 1365 this->event(event); 1378 Q_D(QQuickWebView); 1379 // Map HoverEnter to Move, for WebKit the distinction doesn't matter. 1380 d->pageView->eventHandler()->handleHoverMoveEvent(event); 1366 1381 } 1367 1382 1368 1383 void QQuickWebView::hoverMoveEvent(QHoverEvent* event) 1369 1384 { 1370 this->event(event); 1385 Q_D(QQuickWebView); 1386 d->pageView->eventHandler()->handleHoverMoveEvent(event); 1371 1387 } 1372 1388 1373 1389 void QQuickWebView::hoverLeaveEvent(QHoverEvent* event) 1374 1390 { 1375 this->event(event); 1391 Q_D(QQuickWebView); 1392 d->pageView->eventHandler()->handleHoverLeaveEvent(event); 1376 1393 } 1377 1394 1378 1395 void QQuickWebView::dragMoveEvent(QDragMoveEvent* event) 1379 1396 { 1380 this->event(event); 1397 Q_D(QQuickWebView); 1398 d->pageView->eventHandler()->handleDragMoveEvent(event); 1381 1399 } 1382 1400 1383 1401 void QQuickWebView::dragEnterEvent(QDragEnterEvent* event) 1384 1402 { 1385 this->event(event); 1403 Q_D(QQuickWebView); 1404 d->pageView->eventHandler()->handleDragEnterEvent(event); 1386 1405 } 1387 1406 1388 1407 void QQuickWebView::dragLeaveEvent(QDragLeaveEvent* event) 1389 1408 { 1390 this->event(event); 1409 Q_D(QQuickWebView); 1410 d->pageView->eventHandler()->handleDragLeaveEvent(event); 1391 1411 } 1392 1412 1393 1413 void QQuickWebView::dropEvent(QDropEvent* event) 1394 1414 { 1395 this->event(event); 1415 Q_D(QQuickWebView); 1416 d->pageView->eventHandler()->handleDropEvent(event); 1396 1417 } 1397 1418 1398 1419 bool QQuickWebView::event(QEvent* ev) 1399 1420 { 1400 Q_D(QQuickWebView); 1401 1402 switch (ev->type()) { 1403 case QEvent::MouseMove: 1404 case QEvent::MouseButtonPress: 1405 case QEvent::MouseButtonRelease: 1406 case QEvent::MouseButtonDblClick: 1407 case QEvent::Wheel: 1408 case QEvent::HoverLeave: 1409 case QEvent::HoverEnter: 1410 case QEvent::HoverMove: 1411 case QEvent::DragEnter: 1412 case QEvent::DragLeave: 1413 case QEvent::DragMove: 1414 case QEvent::Drop: 1415 case QEvent::KeyPress: 1416 case QEvent::KeyRelease: 1417 case QEvent::FocusIn: 1418 case QEvent::FocusOut: 1419 case QEvent::TouchBegin: 1420 case QEvent::TouchEnd: 1421 case QEvent::TouchCancel: 1422 case QEvent::TouchUpdate: 1423 if (d->pageView->eventHandler()->handleEvent(ev)) 1424 return true; 1425 } 1426 1427 if (ev->type() == QEvent::InputMethod) 1428 return false; // This is necessary to avoid an endless loop in connection with QQuickItem::event(). 1429 1421 // Re-implemented for possible future use without breaking binary compatibility. 1430 1422 return QQuickItem::event(ev); 1431 1423 } -
trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp
r108805 r109326 107 107 } 108 108 109 bool QtWebPageEventHandler::handleEvent(QEvent* ev) 110 { 111 switch (ev->type()) { 112 case QEvent::MouseMove: 113 return handleMouseMoveEvent(static_cast<QMouseEvent*>(ev)); 114 case QEvent::MouseButtonPress: 115 case QEvent::MouseButtonDblClick: 116 // If a MouseButtonDblClick was received then we got a MouseButtonPress before 117 // handleMousePressEvent will take care of double clicks. 118 return handleMousePressEvent(static_cast<QMouseEvent*>(ev)); 119 case QEvent::MouseButtonRelease: 120 return handleMouseReleaseEvent(static_cast<QMouseEvent*>(ev)); 121 case QEvent::Wheel: 122 return handleWheelEvent(static_cast<QWheelEvent*>(ev)); 123 case QEvent::HoverLeave: 124 return handleHoverLeaveEvent(static_cast<QHoverEvent*>(ev)); 125 case QEvent::HoverEnter: // Fall-through, for WebKit the distinction doesn't matter. 126 case QEvent::HoverMove: 127 return handleHoverMoveEvent(static_cast<QHoverEvent*>(ev)); 128 case QEvent::DragEnter: 129 return handleDragEnterEvent(static_cast<QDragEnterEvent*>(ev)); 130 case QEvent::DragLeave: 131 return handleDragLeaveEvent(static_cast<QDragLeaveEvent*>(ev)); 132 case QEvent::DragMove: 133 return handleDragMoveEvent(static_cast<QDragMoveEvent*>(ev)); 134 case QEvent::Drop: 135 return handleDropEvent(static_cast<QDropEvent*>(ev)); 136 case QEvent::KeyPress: 137 return handleKeyPressEvent(static_cast<QKeyEvent*>(ev)); 138 case QEvent::KeyRelease: 139 return handleKeyReleaseEvent(static_cast<QKeyEvent*>(ev)); 140 case QEvent::FocusIn: 141 return handleFocusInEvent(static_cast<QFocusEvent*>(ev)); 142 case QEvent::FocusOut: 143 return handleFocusOutEvent(static_cast<QFocusEvent*>(ev)); 144 case QEvent::TouchBegin: 145 case QEvent::TouchEnd: 146 case QEvent::TouchCancel: 147 case QEvent::TouchUpdate: 148 touchEvent(static_cast<QTouchEvent*>(ev)); 149 return true; 150 case QEvent::InputMethod: 151 inputMethodEvent(static_cast<QInputMethodEvent*>(ev)); 152 return false; // This is necessary to avoid an endless loop in connection with QQuickItem::event(). 153 } 154 155 // FIXME: Move all common event handling here. 156 return false; 157 } 158 159 bool QtWebPageEventHandler::handleMouseMoveEvent(QMouseEvent* ev) 109 void QtWebPageEventHandler::handleMouseMoveEvent(QMouseEvent* ev) 160 110 { 161 111 // For some reason mouse press results in mouse hover (which is … … 168 118 QPointF webPagePoint = fromItemTransform.map(ev->localPos()); 169 119 if (lastPos == webPagePoint) 170 return ev->isAccepted();120 return; 171 121 lastPos = webPagePoint; 172 122 173 123 m_webPageProxy->handleMouseEvent(NativeWebMouseEvent(ev, fromItemTransform, /*eventClickCount*/ 0)); 174 175 return ev->isAccepted(); 176 } 177 178 bool QtWebPageEventHandler::handleMousePressEvent(QMouseEvent* ev) 124 } 125 126 void QtWebPageEventHandler::handleMousePressEvent(QMouseEvent* ev) 179 127 { 180 128 QTransform fromItemTransform = m_webPage->transformFromItem(); … … 194 142 m_lastClick = webPagePoint; 195 143 m_clickTimer.start(qApp->styleHints()->mouseDoubleClickInterval(), this); 196 197 return ev->isAccepted(); 198 } 199 200 bool QtWebPageEventHandler::handleMouseReleaseEvent(QMouseEvent* ev) 144 } 145 146 void QtWebPageEventHandler::handleMouseReleaseEvent(QMouseEvent* ev) 201 147 { 202 148 QTransform fromItemTransform = m_webPage->transformFromItem(); 203 149 m_webPageProxy->handleMouseEvent(NativeWebMouseEvent(ev, fromItemTransform, /*eventClickCount*/ 0)); 204 return ev->isAccepted(); 205 } 206 207 bool QtWebPageEventHandler::handleWheelEvent(QWheelEvent* ev) 150 } 151 152 void QtWebPageEventHandler::handleWheelEvent(QWheelEvent* ev) 208 153 { 209 154 QTransform fromItemTransform = m_webPage->transformFromItem(); … … 212 157 if (m_interactionEngine) 213 158 m_interactionEngine->wheelEvent(ev); 214 return ev->isAccepted(); 215 } 216 217 bool QtWebPageEventHandler::handleHoverLeaveEvent(QHoverEvent* ev) 159 } 160 161 void QtWebPageEventHandler::handleHoverLeaveEvent(QHoverEvent* ev) 218 162 { 219 163 // To get the correct behavior of mouseout, we need to turn the Leave event of our webview into a mouse move … … 222 166 QHoverEvent fakeEvent(QEvent::HoverMove, QPoint(INT_MIN, INT_MIN), fromItemTransform.map(ev->oldPosF())); 223 167 fakeEvent.setTimestamp(ev->timestamp()); 224 returnhandleHoverMoveEvent(&fakeEvent);225 } 226 227 boolQtWebPageEventHandler::handleHoverMoveEvent(QHoverEvent* ev)168 handleHoverMoveEvent(&fakeEvent); 169 } 170 171 void QtWebPageEventHandler::handleHoverMoveEvent(QHoverEvent* ev) 228 172 { 229 173 QTransform fromItemTransform = m_webPage->transformFromItem(); … … 231 175 me.setAccepted(ev->isAccepted()); 232 176 me.setTimestamp(ev->timestamp()); 233 234 return handleMouseMoveEvent(&me); 235 } 236 237 bool QtWebPageEventHandler::handleDragEnterEvent(QDragEnterEvent* ev) 177 handleMouseMoveEvent(&me); 178 } 179 180 void QtWebPageEventHandler::handleDragEnterEvent(QDragEnterEvent* ev) 238 181 { 239 182 m_webPageProxy->resetDragOperation(); … … 243 186 m_webPageProxy->dragEntered(&dragData); 244 187 ev->acceptProposedAction(); 245 return true; 246 } 247 248 bool QtWebPageEventHandler::handleDragLeaveEvent(QDragLeaveEvent* ev) 188 } 189 190 void QtWebPageEventHandler::handleDragLeaveEvent(QDragLeaveEvent* ev) 249 191 { 250 192 bool accepted = ev->isAccepted(); … … 256 198 257 199 ev->setAccepted(accepted); 258 return accepted; 259 } 260 261 bool QtWebPageEventHandler::handleDragMoveEvent(QDragMoveEvent* ev) 200 } 201 202 void QtWebPageEventHandler::handleDragMoveEvent(QDragMoveEvent* ev) 262 203 { 263 204 bool accepted = ev->isAccepted(); … … 272 213 273 214 ev->setAccepted(accepted); 274 return accepted; 275 } 276 277 bool QtWebPageEventHandler::handleDropEvent(QDropEvent* ev) 215 } 216 217 void QtWebPageEventHandler::handleDropEvent(QDropEvent* ev) 278 218 { 279 219 bool accepted = ev->isAccepted(); … … 287 227 288 228 ev->setAccepted(accepted); 289 return accepted;290 229 } 291 230 … … 320 259 } 321 260 322 boolQtWebPageEventHandler::handleKeyPressEvent(QKeyEvent* ev)261 void QtWebPageEventHandler::handleKeyPressEvent(QKeyEvent* ev) 323 262 { 324 263 m_webPageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(ev)); 325 return true; 326 } 327 328 bool QtWebPageEventHandler::handleKeyReleaseEvent(QKeyEvent* ev) 264 } 265 266 void QtWebPageEventHandler::handleKeyReleaseEvent(QKeyEvent* ev) 329 267 { 330 268 m_webPageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(ev)); 331 return true; 332 } 333 334 bool QtWebPageEventHandler::handleFocusInEvent(QFocusEvent*) 269 } 270 271 void QtWebPageEventHandler::handleFocusInEvent(QFocusEvent*) 335 272 { 336 273 m_webPageProxy->viewStateDidChange(WebPageProxy::ViewIsFocused | WebPageProxy::ViewWindowIsActive); 337 return true; 338 } 339 340 bool QtWebPageEventHandler::handleFocusOutEvent(QFocusEvent*) 274 } 275 276 void QtWebPageEventHandler::handleFocusOutEvent(QFocusEvent*) 341 277 { 342 278 m_webPageProxy->viewStateDidChange(WebPageProxy::ViewIsFocused | WebPageProxy::ViewWindowIsActive); 343 return true;344 279 } 345 280 … … 349 284 } 350 285 351 void QtWebPageEventHandler:: inputMethodEvent(QInputMethodEvent* ev)286 void QtWebPageEventHandler::handleInputMethodEvent(QInputMethodEvent* ev) 352 287 { 353 288 QString commit = ev->commitString(); … … 416 351 } 417 352 418 void QtWebPageEventHandler:: touchEvent(QTouchEvent* event)353 void QtWebPageEventHandler::handleTouchEvent(QTouchEvent* event) 419 354 { 420 355 #if ENABLE(TOUCH_EVENTS) -
trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.h
r108805 r109326 44 44 ~QtWebPageEventHandler(); 45 45 46 bool handleEvent(QEvent*); 46 void handleKeyPressEvent(QKeyEvent*); 47 void handleKeyReleaseEvent(QKeyEvent*); 48 void handleFocusInEvent(QFocusEvent*); 49 void handleFocusOutEvent(QFocusEvent*); 50 void handleMouseMoveEvent(QMouseEvent*); 51 void handleMousePressEvent(QMouseEvent*); 52 void handleMouseReleaseEvent(QMouseEvent*); 53 void handleWheelEvent(QWheelEvent*); 54 void handleHoverLeaveEvent(QHoverEvent*); 55 void handleHoverMoveEvent(QHoverEvent*); 56 void handleDragEnterEvent(QDragEnterEvent*); 57 void handleDragLeaveEvent(QDragLeaveEvent*); 58 void handleDragMoveEvent(QDragMoveEvent*); 59 void handleDropEvent(QDropEvent*); 60 void handleInputMethodEvent(QInputMethodEvent*); 61 void handleTouchEvent(QTouchEvent*); 47 62 48 63 void setViewportInteractionEngine(QtViewportInteractionEngine*); … … 75 90 76 91 private: 77 bool handleKeyPressEvent(QKeyEvent*);78 bool handleKeyReleaseEvent(QKeyEvent*);79 bool handleFocusInEvent(QFocusEvent*);80 bool handleFocusOutEvent(QFocusEvent*);81 bool handleMouseMoveEvent(QMouseEvent*);82 bool handleMousePressEvent(QMouseEvent*);83 bool handleMouseReleaseEvent(QMouseEvent*);84 bool handleWheelEvent(QWheelEvent*);85 bool handleHoverLeaveEvent(QHoverEvent*);86 bool handleHoverMoveEvent(QHoverEvent*);87 bool handleDragEnterEvent(QDragEnterEvent*);88 bool handleDragLeaveEvent(QDragLeaveEvent*);89 bool handleDragMoveEvent(QDragMoveEvent*);90 bool handleDropEvent(QDropEvent*);91 92 92 void timerEvent(QTimerEvent*); 93 94 void touchEvent(QTouchEvent*);95 void inputMethodEvent(QInputMethodEvent*);96 93 97 94 QPointF m_lastClick; -
trunk/Tools/ChangeLog
r109317 r109326 1 2012-02-29 Simon Hausmann <simon.hausmann@nokia.com> 2 3 [Qt][WK2] QQuickWebView::event should lookup faster which events QQuickWebPage can handle 4 https://bugs.webkit.org/show_bug.cgi?id=78047 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 Send events for the webview through the QQuickCanvas instead of directly to the item. Direct 9 sending to the item requires the QObject::event re-implementation to dispatch to the correct 10 event handling function. However QQuickItem::event doesn't do that. Instead QQuickCanvas calls 11 the event handlers directly, and with the removal of our own dispatching we need to go through 12 that code path. 13 14 * WebKitTestRunner/qt/PlatformWebViewQt.cpp: 15 (WTR::PlatformWebView::sendEvent): 16 (WTR::PlatformWebView::postEvent): 17 1 18 2012-02-29 Adam Barth <abarth@webkit.org> 2 19 -
trunk/Tools/WebKitTestRunner/qt/PlatformWebViewQt.cpp
r109232 r109326 127 127 bool PlatformWebView::sendEvent(QEvent* event) 128 128 { 129 return QCoreApplication::sendEvent(m_ view, event);129 return QCoreApplication::sendEvent(m_window, event); 130 130 } 131 131 132 132 void PlatformWebView::postEvent(QEvent* event) 133 133 { 134 QCoreApplication::postEvent(m_ view, event);134 QCoreApplication::postEvent(m_window, event); 135 135 } 136 136
Note: See TracChangeset
for help on using the changeset viewer.