Modified: trunk/Source/WebKit2/ChangeLog (108804 => 108805)
--- trunk/Source/WebKit2/ChangeLog 2012-02-24 16:33:06 UTC (rev 108804)
+++ trunk/Source/WebKit2/ChangeLog 2012-02-24 16:33:19 UTC (rev 108805)
@@ -1,5 +1,54 @@
2012-02-24 Simon Hausmann <[email protected]>
+ Unreviewed, rolling out r108798.
+ http://trac.webkit.org/changeset/108798
+ https://bugs.webkit.org/show_bug.cgi?id=78047
+
+ Broke too many Qt WK2 tests.
+
+ * 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::handleEvent):
+ (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::inputMethodEvent):
+ (QtWebPageEventHandler::touchEvent):
+ * UIProcess/qt/QtWebPageEventHandler.h:
+ (QtWebPageEventHandler):
+
+2012-02-24 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
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp (108804 => 108805)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-02-24 16:33:06 UTC (rev 108804)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-02-24 16:33:19 UTC (rev 108805)
@@ -1281,120 +1281,128 @@
void QQuickWebView::keyPressEvent(QKeyEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleKeyPressEvent(event);
+ this->event(event);
}
void QQuickWebView::keyReleaseEvent(QKeyEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleKeyReleaseEvent(event);
+ this->event(event);
}
void QQuickWebView::inputMethodEvent(QInputMethodEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleInputMethodEvent(event);
+ this->event(event);
}
void QQuickWebView::focusInEvent(QFocusEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleFocusInEvent(event);
+ this->event(event);
}
void QQuickWebView::focusOutEvent(QFocusEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleFocusOutEvent(event);
+ this->event(event);
}
void QQuickWebView::touchEvent(QTouchEvent* event)
{
- Q_D(QQuickWebView);
forceActiveFocus();
- d->pageView->eventHandler()->handleTouchEvent(event);
+ this->event(event);
}
void QQuickWebView::mousePressEvent(QMouseEvent* event)
{
- Q_D(QQuickWebView);
forceActiveFocus();
- d->pageView->eventHandler()->handleMousePressEvent(event);
+ this->event(event);
}
void QQuickWebView::mouseMoveEvent(QMouseEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleMouseMoveEvent(event);
+ this->event(event);
}
void QQuickWebView::mouseReleaseEvent(QMouseEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleMouseReleaseEvent(event);
+ this->event(event);
}
void QQuickWebView::mouseDoubleClickEvent(QMouseEvent* 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);
+ this->event(event);
}
void QQuickWebView::wheelEvent(QWheelEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleWheelEvent(event);
+ this->event(event);
}
void QQuickWebView::hoverEnterEvent(QHoverEvent* event)
{
- Q_D(QQuickWebView);
- // Map HoverEnter to Move, for WebKit the distinction doesn't matter.
- d->pageView->eventHandler()->handleHoverMoveEvent(event);
+ this->event(event);
}
void QQuickWebView::hoverMoveEvent(QHoverEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleHoverMoveEvent(event);
+ this->event(event);
}
void QQuickWebView::hoverLeaveEvent(QHoverEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleHoverLeaveEvent(event);
+ this->event(event);
}
void QQuickWebView::dragMoveEvent(QDragMoveEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleDragMoveEvent(event);
+ this->event(event);
}
void QQuickWebView::dragEnterEvent(QDragEnterEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleDragEnterEvent(event);
+ this->event(event);
}
void QQuickWebView::dragLeaveEvent(QDragLeaveEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleDragLeaveEvent(event);
+ this->event(event);
}
void QQuickWebView::dropEvent(QDropEvent* event)
{
- Q_D(QQuickWebView);
- d->pageView->eventHandler()->handleDropEvent(event);
+ this->event(event);
}
bool QQuickWebView::event(QEvent* ev)
{
- // Re-implemented for possible future use without breaking binary compatibility.
+ 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().
+
return QQuickItem::event(ev);
}
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp (108804 => 108805)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp 2012-02-24 16:33:06 UTC (rev 108804)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp 2012-02-24 16:33:19 UTC (rev 108805)
@@ -106,8 +106,58 @@
disconnect(qApp->inputPanel(), SIGNAL(visibleChanged()), this, SLOT(inputPanelVisibleChanged()));
}
-void QtWebPageEventHandler::handleMouseMoveEvent(QMouseEvent* ev)
+bool QtWebPageEventHandler::handleEvent(QEvent* 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.
@@ -117,13 +167,15 @@
QTransform fromItemTransform = m_webPage->transformFromItem();
QPointF webPagePoint = fromItemTransform.map(ev->localPos());
if (lastPos == webPagePoint)
- return;
+ return ev->isAccepted();
lastPos = webPagePoint;
m_webPageProxy->handleMouseEvent(NativeWebMouseEvent(ev, fromItemTransform, /*eventClickCount*/ 0));
+
+ return ev->isAccepted();
}
-void QtWebPageEventHandler::handleMousePressEvent(QMouseEvent* ev)
+bool QtWebPageEventHandler::handleMousePressEvent(QMouseEvent* ev)
{
QTransform fromItemTransform = m_webPage->transformFromItem();
QPointF webPagePoint = fromItemTransform.map(ev->localPos());
@@ -141,43 +193,48 @@
m_lastClick = webPagePoint;
m_clickTimer.start(qApp->styleHints()->mouseDoubleClickInterval(), this);
+
+ return ev->isAccepted();
}
-void QtWebPageEventHandler::handleMouseReleaseEvent(QMouseEvent* ev)
+bool QtWebPageEventHandler::handleMouseReleaseEvent(QMouseEvent* ev)
{
QTransform fromItemTransform = m_webPage->transformFromItem();
m_webPageProxy->handleMouseEvent(NativeWebMouseEvent(ev, fromItemTransform, /*eventClickCount*/ 0));
+ return ev->isAccepted();
}
-void QtWebPageEventHandler::handleWheelEvent(QWheelEvent* ev)
+bool 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();
}
-void QtWebPageEventHandler::handleHoverLeaveEvent(QHoverEvent* ev)
+bool 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());
- handleHoverMoveEvent(&fakeEvent);
+ return handleHoverMoveEvent(&fakeEvent);
}
-void QtWebPageEventHandler::handleHoverMoveEvent(QHoverEvent* ev)
+bool 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());
- handleMouseMoveEvent(&me);
+
+ return handleMouseMoveEvent(&me);
}
-void QtWebPageEventHandler::handleDragEnterEvent(QDragEnterEvent* ev)
+bool QtWebPageEventHandler::handleDragEnterEvent(QDragEnterEvent* ev)
{
m_webPageProxy->resetDragOperation();
QTransform fromItemTransform = m_webPage->transformFromItem();
@@ -185,9 +242,10 @@
DragData dragData(ev->mimeData(), fromItemTransform.map(ev->pos()), QCursor::pos(), dropActionToDragOperation(ev->possibleActions()));
m_webPageProxy->dragEntered(&dragData);
ev->acceptProposedAction();
+ return true;
}
-void QtWebPageEventHandler::handleDragLeaveEvent(QDragLeaveEvent* ev)
+bool QtWebPageEventHandler::handleDragLeaveEvent(QDragLeaveEvent* ev)
{
bool accepted = ev->isAccepted();
@@ -197,9 +255,10 @@
m_webPageProxy->resetDragOperation();
ev->setAccepted(accepted);
+ return accepted;
}
-void QtWebPageEventHandler::handleDragMoveEvent(QDragMoveEvent* ev)
+bool QtWebPageEventHandler::handleDragMoveEvent(QDragMoveEvent* ev)
{
bool accepted = ev->isAccepted();
@@ -212,9 +271,10 @@
ev->accept();
ev->setAccepted(accepted);
+ return accepted;
}
-void QtWebPageEventHandler::handleDropEvent(QDropEvent* ev)
+bool QtWebPageEventHandler::handleDropEvent(QDropEvent* ev)
{
bool accepted = ev->isAccepted();
QTransform fromItemTransform = m_webPage->transformFromItem();
@@ -226,6 +286,7 @@
ev->accept();
ev->setAccepted(accepted);
+ return accepted;
}
void QtWebPageEventHandler::handlePotentialSingleTapEvent(const QTouchEvent::TouchPoint& point)
@@ -258,24 +319,28 @@
QObject::timerEvent(ev);
}
-void QtWebPageEventHandler::handleKeyPressEvent(QKeyEvent* ev)
+bool QtWebPageEventHandler::handleKeyPressEvent(QKeyEvent* ev)
{
m_webPageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(ev));
+ return true;
}
-void QtWebPageEventHandler::handleKeyReleaseEvent(QKeyEvent* ev)
+bool QtWebPageEventHandler::handleKeyReleaseEvent(QKeyEvent* ev)
{
m_webPageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(ev));
+ return true;
}
-void QtWebPageEventHandler::handleFocusInEvent(QFocusEvent*)
+bool QtWebPageEventHandler::handleFocusInEvent(QFocusEvent*)
{
m_webPageProxy->viewStateDidChange(WebPageProxy::ViewIsFocused | WebPageProxy::ViewWindowIsActive);
+ return true;
}
-void QtWebPageEventHandler::handleFocusOutEvent(QFocusEvent*)
+bool QtWebPageEventHandler::handleFocusOutEvent(QFocusEvent*)
{
m_webPageProxy->viewStateDidChange(WebPageProxy::ViewIsFocused | WebPageProxy::ViewWindowIsActive);
+ return true;
}
void QtWebPageEventHandler::setViewportInteractionEngine(QtViewportInteractionEngine* engine)
@@ -283,7 +348,7 @@
m_interactionEngine = engine;
}
-void QtWebPageEventHandler::handleInputMethodEvent(QInputMethodEvent* ev)
+void QtWebPageEventHandler::inputMethodEvent(QInputMethodEvent* ev)
{
QString commit = ev->commitString();
QString composition = ev->preeditString();
@@ -350,7 +415,7 @@
ev->accept();
}
-void QtWebPageEventHandler::handleTouchEvent(QTouchEvent* event)
+void QtWebPageEventHandler::touchEvent(QTouchEvent* event)
{
#if ENABLE(TOUCH_EVENTS)
QTransform fromItemTransform = m_webPage->transformFromItem();
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.h (108804 => 108805)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.h 2012-02-24 16:33:06 UTC (rev 108804)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.h 2012-02-24 16:33:19 UTC (rev 108805)
@@ -43,22 +43,7 @@
QtWebPageEventHandler(WKPageRef, QQuickWebPage*, QQuickWebView*);
~QtWebPageEventHandler();
- 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*);
+ bool handleEvent(QEvent*);
void setViewportInteractionEngine(QtViewportInteractionEngine*);
@@ -89,8 +74,26 @@
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;