Modified: trunk/Source/WebKit2/ChangeLog (109325 => 109326)
--- trunk/Source/WebKit2/ChangeLog 2012-03-01 09:31:30 UTC (rev 109325)
+++ trunk/Source/WebKit2/ChangeLog 2012-03-01 09:32:13 UTC (rev 109326)
@@ -1,3 +1,53 @@
+2012-02-29 Simon Hausmann <[email protected]>
+
+ [Qt][WK2] QQuickWebView::event should lookup faster which events QQuickWebPage can handle
+ https://bugs.webkit.org/show_bug.cgi?id=78047
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Replaced double-dispatch of events with direct forwarding of events from QQuickWebView::*Event to
+ QtWebPageEventHandler::handle*Event.
+
+ * UIProcess/API/qt/qquickwebview.cpp:
+ (QQuickWebView::keyPressEvent):
+ (QQuickWebView::keyReleaseEvent):
+ (QQuickWebView::inputMethodEvent):
+ (QQuickWebView::focusInEvent):
+ (QQuickWebView::focusOutEvent):
+ (QQuickWebView::touchEvent):
+ (QQuickWebView::mousePressEvent):
+ (QQuickWebView::mouseMoveEvent):
+ (QQuickWebView::mouseReleaseEvent):
+ (QQuickWebView::mouseDoubleClickEvent):
+ (QQuickWebView::wheelEvent):
+ (QQuickWebView::hoverEnterEvent):
+ (QQuickWebView::hoverMoveEvent):
+ (QQuickWebView::hoverLeaveEvent):
+ (QQuickWebView::dragMoveEvent):
+ (QQuickWebView::dragEnterEvent):
+ (QQuickWebView::dragLeaveEvent):
+ (QQuickWebView::dropEvent):
+ (QQuickWebView::event):
+ * UIProcess/qt/QtWebPageEventHandler.cpp:
+ (QtWebPageEventHandler::handleMouseMoveEvent):
+ (QtWebPageEventHandler::handleMousePressEvent):
+ (QtWebPageEventHandler::handleMouseReleaseEvent):
+ (QtWebPageEventHandler::handleWheelEvent):
+ (QtWebPageEventHandler::handleHoverLeaveEvent):
+ (QtWebPageEventHandler::handleHoverMoveEvent):
+ (QtWebPageEventHandler::handleDragEnterEvent):
+ (QtWebPageEventHandler::handleDragLeaveEvent):
+ (QtWebPageEventHandler::handleDragMoveEvent):
+ (QtWebPageEventHandler::handleDropEvent):
+ (QtWebPageEventHandler::handleKeyPressEvent):
+ (QtWebPageEventHandler::handleKeyReleaseEvent):
+ (QtWebPageEventHandler::handleFocusInEvent):
+ (QtWebPageEventHandler::handleFocusOutEvent):
+ (QtWebPageEventHandler::handleInputMethodEvent):
+ (QtWebPageEventHandler::handleTouchEvent):
+ * UIProcess/qt/QtWebPageEventHandler.h:
+ (QtWebPageEventHandler):
+
2012-03-01 Csaba Osztrogonác <[email protected]>
[Qt][WK2] Unreviewed buildfix after r109277.
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp (109325 => 109326)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-03-01 09:31:30 UTC (rev 109325)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-03-01 09:32:13 UTC (rev 109326)
@@ -1305,128 +1305,120 @@
void QQuickWebView::keyPressEvent(QKeyEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleKeyPressEvent(event);
}
void QQuickWebView::keyReleaseEvent(QKeyEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleKeyReleaseEvent(event);
}
void QQuickWebView::inputMethodEvent(QInputMethodEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleInputMethodEvent(event);
}
void QQuickWebView::focusInEvent(QFocusEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleFocusInEvent(event);
}
void QQuickWebView::focusOutEvent(QFocusEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleFocusOutEvent(event);
}
void QQuickWebView::touchEvent(QTouchEvent* event)
{
+ Q_D(QQuickWebView);
forceActiveFocus();
- this->event(event);
+ d->pageView->eventHandler()->handleTouchEvent(event);
}
void QQuickWebView::mousePressEvent(QMouseEvent* event)
{
+ Q_D(QQuickWebView);
forceActiveFocus();
- this->event(event);
+ d->pageView->eventHandler()->handleMousePressEvent(event);
}
void QQuickWebView::mouseMoveEvent(QMouseEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleMouseMoveEvent(event);
}
void QQuickWebView::mouseReleaseEvent(QMouseEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleMouseReleaseEvent(event);
}
void QQuickWebView::mouseDoubleClickEvent(QMouseEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ // If a MouseButtonDblClick was received then we got a MouseButtonPress before
+ // handleMousePressEvent will take care of double clicks.
+ d->pageView->eventHandler()->handleMousePressEvent(event);
}
void QQuickWebView::wheelEvent(QWheelEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleWheelEvent(event);
}
void QQuickWebView::hoverEnterEvent(QHoverEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ // Map HoverEnter to Move, for WebKit the distinction doesn't matter.
+ d->pageView->eventHandler()->handleHoverMoveEvent(event);
}
void QQuickWebView::hoverMoveEvent(QHoverEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleHoverMoveEvent(event);
}
void QQuickWebView::hoverLeaveEvent(QHoverEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleHoverLeaveEvent(event);
}
void QQuickWebView::dragMoveEvent(QDragMoveEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleDragMoveEvent(event);
}
void QQuickWebView::dragEnterEvent(QDragEnterEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleDragEnterEvent(event);
}
void QQuickWebView::dragLeaveEvent(QDragLeaveEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleDragLeaveEvent(event);
}
void QQuickWebView::dropEvent(QDropEvent* event)
{
- this->event(event);
+ Q_D(QQuickWebView);
+ d->pageView->eventHandler()->handleDropEvent(event);
}
bool QQuickWebView::event(QEvent* ev)
{
- Q_D(QQuickWebView);
-
- switch (ev->type()) {
- case QEvent::MouseMove:
- case QEvent::MouseButtonPress:
- case QEvent::MouseButtonRelease:
- case QEvent::MouseButtonDblClick:
- case QEvent::Wheel:
- case QEvent::HoverLeave:
- case QEvent::HoverEnter:
- case QEvent::HoverMove:
- case QEvent::DragEnter:
- case QEvent::DragLeave:
- case QEvent::DragMove:
- case QEvent::Drop:
- case QEvent::KeyPress:
- case QEvent::KeyRelease:
- case QEvent::FocusIn:
- case QEvent::FocusOut:
- case QEvent::TouchBegin:
- case QEvent::TouchEnd:
- case QEvent::TouchCancel:
- case QEvent::TouchUpdate:
- if (d->pageView->eventHandler()->handleEvent(ev))
- return true;
- }
-
- if (ev->type() == QEvent::InputMethod)
- return false; // This is necessary to avoid an endless loop in connection with QQuickItem::event().
-
+ // Re-implemented for possible future use without breaking binary compatibility.
return QQuickItem::event(ev);
}
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp (109325 => 109326)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp 2012-03-01 09:31:30 UTC (rev 109325)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp 2012-03-01 09:32:13 UTC (rev 109326)
@@ -106,58 +106,8 @@
disconnect(qApp->inputPanel(), SIGNAL(visibleChanged()), this, SLOT(inputPanelVisibleChanged()));
}
-bool QtWebPageEventHandler::handleEvent(QEvent* ev)
+void QtWebPageEventHandler::handleMouseMoveEvent(QMouseEvent* ev)
{
- switch (ev->type()) {
- case QEvent::MouseMove:
- return handleMouseMoveEvent(static_cast<QMouseEvent*>(ev));
- case QEvent::MouseButtonPress:
- case QEvent::MouseButtonDblClick:
- // If a MouseButtonDblClick was received then we got a MouseButtonPress before
- // handleMousePressEvent will take care of double clicks.
- return handleMousePressEvent(static_cast<QMouseEvent*>(ev));
- case QEvent::MouseButtonRelease:
- return handleMouseReleaseEvent(static_cast<QMouseEvent*>(ev));
- case QEvent::Wheel:
- return handleWheelEvent(static_cast<QWheelEvent*>(ev));
- case QEvent::HoverLeave:
- return handleHoverLeaveEvent(static_cast<QHoverEvent*>(ev));
- case QEvent::HoverEnter: // Fall-through, for WebKit the distinction doesn't matter.
- case QEvent::HoverMove:
- return handleHoverMoveEvent(static_cast<QHoverEvent*>(ev));
- case QEvent::DragEnter:
- return handleDragEnterEvent(static_cast<QDragEnterEvent*>(ev));
- case QEvent::DragLeave:
- return handleDragLeaveEvent(static_cast<QDragLeaveEvent*>(ev));
- case QEvent::DragMove:
- return handleDragMoveEvent(static_cast<QDragMoveEvent*>(ev));
- case QEvent::Drop:
- return handleDropEvent(static_cast<QDropEvent*>(ev));
- case QEvent::KeyPress:
- return handleKeyPressEvent(static_cast<QKeyEvent*>(ev));
- case QEvent::KeyRelease:
- return handleKeyReleaseEvent(static_cast<QKeyEvent*>(ev));
- case QEvent::FocusIn:
- return handleFocusInEvent(static_cast<QFocusEvent*>(ev));
- case QEvent::FocusOut:
- return handleFocusOutEvent(static_cast<QFocusEvent*>(ev));
- case QEvent::TouchBegin:
- case QEvent::TouchEnd:
- case QEvent::TouchCancel:
- case QEvent::TouchUpdate:
- touchEvent(static_cast<QTouchEvent*>(ev));
- return true;
- case QEvent::InputMethod:
- inputMethodEvent(static_cast<QInputMethodEvent*>(ev));
- return false; // This is necessary to avoid an endless loop in connection with QQuickItem::event().
- }
-
- // FIXME: Move all common event handling here.
- return false;
-}
-
-bool QtWebPageEventHandler::handleMouseMoveEvent(QMouseEvent* ev)
-{
// For some reason mouse press results in mouse hover (which is
// converted to mouse move for WebKit). We ignore these hover
// events by comparing lastPos with newPos.
@@ -167,15 +117,13 @@
QTransform fromItemTransform = m_webPage->transformFromItem();
QPointF webPagePoint = fromItemTransform.map(ev->localPos());
if (lastPos == webPagePoint)
- return ev->isAccepted();
+ return;
lastPos = webPagePoint;
m_webPageProxy->handleMouseEvent(NativeWebMouseEvent(ev, fromItemTransform, /*eventClickCount*/ 0));
-
- return ev->isAccepted();
}
-bool QtWebPageEventHandler::handleMousePressEvent(QMouseEvent* ev)
+void QtWebPageEventHandler::handleMousePressEvent(QMouseEvent* ev)
{
QTransform fromItemTransform = m_webPage->transformFromItem();
QPointF webPagePoint = fromItemTransform.map(ev->localPos());
@@ -193,48 +141,43 @@
m_lastClick = webPagePoint;
m_clickTimer.start(qApp->styleHints()->mouseDoubleClickInterval(), this);
-
- return ev->isAccepted();
}
-bool QtWebPageEventHandler::handleMouseReleaseEvent(QMouseEvent* ev)
+void QtWebPageEventHandler::handleMouseReleaseEvent(QMouseEvent* ev)
{
QTransform fromItemTransform = m_webPage->transformFromItem();
m_webPageProxy->handleMouseEvent(NativeWebMouseEvent(ev, fromItemTransform, /*eventClickCount*/ 0));
- return ev->isAccepted();
}
-bool QtWebPageEventHandler::handleWheelEvent(QWheelEvent* ev)
+void QtWebPageEventHandler::handleWheelEvent(QWheelEvent* ev)
{
QTransform fromItemTransform = m_webPage->transformFromItem();
m_webPageProxy->handleWheelEvent(NativeWebWheelEvent(ev, fromItemTransform));
// FIXME: Handle whether the page used the wheel event or not.
if (m_interactionEngine)
m_interactionEngine->wheelEvent(ev);
- return ev->isAccepted();
}
-bool QtWebPageEventHandler::handleHoverLeaveEvent(QHoverEvent* ev)
+void QtWebPageEventHandler::handleHoverLeaveEvent(QHoverEvent* ev)
{
// To get the correct behavior of mouseout, we need to turn the Leave event of our webview into a mouse move
// to a very far region.
QTransform fromItemTransform = m_webPage->transformFromItem();
QHoverEvent fakeEvent(QEvent::HoverMove, QPoint(INT_MIN, INT_MIN), fromItemTransform.map(ev->oldPosF()));
fakeEvent.setTimestamp(ev->timestamp());
- return handleHoverMoveEvent(&fakeEvent);
+ handleHoverMoveEvent(&fakeEvent);
}
-bool QtWebPageEventHandler::handleHoverMoveEvent(QHoverEvent* ev)
+void QtWebPageEventHandler::handleHoverMoveEvent(QHoverEvent* ev)
{
QTransform fromItemTransform = m_webPage->transformFromItem();
QMouseEvent me(QEvent::MouseMove, fromItemTransform.map(ev->posF()), Qt::NoButton, Qt::NoButton, Qt::NoModifier);
me.setAccepted(ev->isAccepted());
me.setTimestamp(ev->timestamp());
-
- return handleMouseMoveEvent(&me);
+ handleMouseMoveEvent(&me);
}
-bool QtWebPageEventHandler::handleDragEnterEvent(QDragEnterEvent* ev)
+void QtWebPageEventHandler::handleDragEnterEvent(QDragEnterEvent* ev)
{
m_webPageProxy->resetDragOperation();
QTransform fromItemTransform = m_webPage->transformFromItem();
@@ -242,10 +185,9 @@
DragData dragData(ev->mimeData(), fromItemTransform.map(ev->pos()), QCursor::pos(), dropActionToDragOperation(ev->possibleActions()));
m_webPageProxy->dragEntered(&dragData);
ev->acceptProposedAction();
- return true;
}
-bool QtWebPageEventHandler::handleDragLeaveEvent(QDragLeaveEvent* ev)
+void QtWebPageEventHandler::handleDragLeaveEvent(QDragLeaveEvent* ev)
{
bool accepted = ev->isAccepted();
@@ -255,10 +197,9 @@
m_webPageProxy->resetDragOperation();
ev->setAccepted(accepted);
- return accepted;
}
-bool QtWebPageEventHandler::handleDragMoveEvent(QDragMoveEvent* ev)
+void QtWebPageEventHandler::handleDragMoveEvent(QDragMoveEvent* ev)
{
bool accepted = ev->isAccepted();
@@ -271,10 +212,9 @@
ev->accept();
ev->setAccepted(accepted);
- return accepted;
}
-bool QtWebPageEventHandler::handleDropEvent(QDropEvent* ev)
+void QtWebPageEventHandler::handleDropEvent(QDropEvent* ev)
{
bool accepted = ev->isAccepted();
QTransform fromItemTransform = m_webPage->transformFromItem();
@@ -286,7 +226,6 @@
ev->accept();
ev->setAccepted(accepted);
- return accepted;
}
void QtWebPageEventHandler::handlePotentialSingleTapEvent(const QTouchEvent::TouchPoint& point)
@@ -319,28 +258,24 @@
QObject::timerEvent(ev);
}
-bool QtWebPageEventHandler::handleKeyPressEvent(QKeyEvent* ev)
+void QtWebPageEventHandler::handleKeyPressEvent(QKeyEvent* ev)
{
m_webPageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(ev));
- return true;
}
-bool QtWebPageEventHandler::handleKeyReleaseEvent(QKeyEvent* ev)
+void QtWebPageEventHandler::handleKeyReleaseEvent(QKeyEvent* ev)
{
m_webPageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(ev));
- return true;
}
-bool QtWebPageEventHandler::handleFocusInEvent(QFocusEvent*)
+void QtWebPageEventHandler::handleFocusInEvent(QFocusEvent*)
{
m_webPageProxy->viewStateDidChange(WebPageProxy::ViewIsFocused | WebPageProxy::ViewWindowIsActive);
- return true;
}
-bool QtWebPageEventHandler::handleFocusOutEvent(QFocusEvent*)
+void QtWebPageEventHandler::handleFocusOutEvent(QFocusEvent*)
{
m_webPageProxy->viewStateDidChange(WebPageProxy::ViewIsFocused | WebPageProxy::ViewWindowIsActive);
- return true;
}
void QtWebPageEventHandler::setViewportInteractionEngine(QtViewportInteractionEngine* engine)
@@ -348,7 +283,7 @@
m_interactionEngine = engine;
}
-void QtWebPageEventHandler::inputMethodEvent(QInputMethodEvent* ev)
+void QtWebPageEventHandler::handleInputMethodEvent(QInputMethodEvent* ev)
{
QString commit = ev->commitString();
QString composition = ev->preeditString();
@@ -415,7 +350,7 @@
ev->accept();
}
-void QtWebPageEventHandler::touchEvent(QTouchEvent* event)
+void QtWebPageEventHandler::handleTouchEvent(QTouchEvent* event)
{
#if ENABLE(TOUCH_EVENTS)
QTransform fromItemTransform = m_webPage->transformFromItem();
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.h (109325 => 109326)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.h 2012-03-01 09:31:30 UTC (rev 109325)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.h 2012-03-01 09:32:13 UTC (rev 109326)
@@ -43,7 +43,22 @@
QtWebPageEventHandler(WKPageRef, QQuickWebPage*, QQuickWebView*);
~QtWebPageEventHandler();
- bool handleEvent(QEvent*);
+ void handleKeyPressEvent(QKeyEvent*);
+ void handleKeyReleaseEvent(QKeyEvent*);
+ void handleFocusInEvent(QFocusEvent*);
+ void handleFocusOutEvent(QFocusEvent*);
+ void handleMouseMoveEvent(QMouseEvent*);
+ void handleMousePressEvent(QMouseEvent*);
+ void handleMouseReleaseEvent(QMouseEvent*);
+ void handleWheelEvent(QWheelEvent*);
+ void handleHoverLeaveEvent(QHoverEvent*);
+ void handleHoverMoveEvent(QHoverEvent*);
+ void handleDragEnterEvent(QDragEnterEvent*);
+ void handleDragLeaveEvent(QDragLeaveEvent*);
+ void handleDragMoveEvent(QDragMoveEvent*);
+ void handleDropEvent(QDropEvent*);
+ void handleInputMethodEvent(QInputMethodEvent*);
+ void handleTouchEvent(QTouchEvent*);
void setViewportInteractionEngine(QtViewportInteractionEngine*);
@@ -74,26 +89,8 @@
void inputPanelVisibleChanged();
private:
- bool handleKeyPressEvent(QKeyEvent*);
- bool handleKeyReleaseEvent(QKeyEvent*);
- bool handleFocusInEvent(QFocusEvent*);
- bool handleFocusOutEvent(QFocusEvent*);
- bool handleMouseMoveEvent(QMouseEvent*);
- bool handleMousePressEvent(QMouseEvent*);
- bool handleMouseReleaseEvent(QMouseEvent*);
- bool handleWheelEvent(QWheelEvent*);
- bool handleHoverLeaveEvent(QHoverEvent*);
- bool handleHoverMoveEvent(QHoverEvent*);
- bool handleDragEnterEvent(QDragEnterEvent*);
- bool handleDragLeaveEvent(QDragLeaveEvent*);
- bool handleDragMoveEvent(QDragMoveEvent*);
- bool handleDropEvent(QDropEvent*);
-
void timerEvent(QTimerEvent*);
- void touchEvent(QTouchEvent*);
- void inputMethodEvent(QInputMethodEvent*);
-
QPointF m_lastClick;
QBasicTimer m_clickTimer;
Qt::MouseButton m_previousClickButton;
Modified: trunk/Tools/ChangeLog (109325 => 109326)
--- trunk/Tools/ChangeLog 2012-03-01 09:31:30 UTC (rev 109325)
+++ trunk/Tools/ChangeLog 2012-03-01 09:32:13 UTC (rev 109326)
@@ -1,3 +1,20 @@
+2012-02-29 Simon Hausmann <[email protected]>
+
+ [Qt][WK2] QQuickWebView::event should lookup faster which events QQuickWebPage can handle
+ https://bugs.webkit.org/show_bug.cgi?id=78047
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Send events for the webview through the QQuickCanvas instead of directly to the item. Direct
+ sending to the item requires the QObject::event re-implementation to dispatch to the correct
+ event handling function. However QQuickItem::event doesn't do that. Instead QQuickCanvas calls
+ the event handlers directly, and with the removal of our own dispatching we need to go through
+ that code path.
+
+ * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
+ (WTR::PlatformWebView::sendEvent):
+ (WTR::PlatformWebView::postEvent):
+
2012-02-29 Adam Barth <[email protected]>
Disable watchlist. It's been spamming CCs.
Modified: trunk/Tools/WebKitTestRunner/qt/PlatformWebViewQt.cpp (109325 => 109326)
--- trunk/Tools/WebKitTestRunner/qt/PlatformWebViewQt.cpp 2012-03-01 09:31:30 UTC (rev 109325)
+++ trunk/Tools/WebKitTestRunner/qt/PlatformWebViewQt.cpp 2012-03-01 09:32:13 UTC (rev 109326)
@@ -126,12 +126,12 @@
bool PlatformWebView::sendEvent(QEvent* event)
{
- return QCoreApplication::sendEvent(m_view, event);
+ return QCoreApplication::sendEvent(m_window, event);
}
void PlatformWebView::postEvent(QEvent* event)
{
- QCoreApplication::postEvent(m_view, event);
+ QCoreApplication::postEvent(m_window, event);
}
void PlatformWebView::addChromeInputField()