Title: [97744] trunk/Source/WebKit2
- Revision
- 97744
- Author
- [email protected]
- Date
- 2011-10-18 05:52:32 -0700 (Tue, 18 Oct 2011)
Log Message
[Qt] Send mouse move events when we handle HoverEnter/Leave in QDesktopWebView
https://bugs.webkit.org/show_bug.cgi?id=70297
Reviewed by Simon Hausmann.
Qt treat the first and last hover movements as special HoverMove and HoverLeave events, but
WebKit doesn't make the difference, so we need to create move events for them.
While HoverEnter is in practice equivalent to HoverMove, the HoverLeave event is a bit
different because we want to emulate that the mouse is not only leaving the current node, but
completely leaving the whole document. The way to do this is to manufacture a move event with
a very far position, and was inspired by WebView::handleMouseEvent() in
Source/WebKit/win/WebView.cpp.
This patch fixes DesktopWebViewLinkHovered QML tests.
* UIProcess/qt/qdesktopwebpageproxy.cpp:
(QDesktopWebPageProxy::handleEvent):
(QDesktopWebPageProxy::handleHoverLeaveEvent):
* UIProcess/qt/qdesktopwebpageproxy.h:
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (97743 => 97744)
--- trunk/Source/WebKit2/ChangeLog 2011-10-18 12:51:43 UTC (rev 97743)
+++ trunk/Source/WebKit2/ChangeLog 2011-10-18 12:52:32 UTC (rev 97744)
@@ -1,3 +1,26 @@
+2011-10-18 Caio Marcelo de Oliveira Filho <[email protected]>
+
+ [Qt] Send mouse move events when we handle HoverEnter/Leave in QDesktopWebView
+ https://bugs.webkit.org/show_bug.cgi?id=70297
+
+ Reviewed by Simon Hausmann.
+
+ Qt treat the first and last hover movements as special HoverMove and HoverLeave events, but
+ WebKit doesn't make the difference, so we need to create move events for them.
+
+ While HoverEnter is in practice equivalent to HoverMove, the HoverLeave event is a bit
+ different because we want to emulate that the mouse is not only leaving the current node, but
+ completely leaving the whole document. The way to do this is to manufacture a move event with
+ a very far position, and was inspired by WebView::handleMouseEvent() in
+ Source/WebKit/win/WebView.cpp.
+
+ This patch fixes DesktopWebViewLinkHovered QML tests.
+
+ * UIProcess/qt/qdesktopwebpageproxy.cpp:
+ (QDesktopWebPageProxy::handleEvent):
+ (QDesktopWebPageProxy::handleHoverLeaveEvent):
+ * UIProcess/qt/qdesktopwebpageproxy.h:
+
2011-10-18 Alexis Menard <[email protected]>
[Qt][WK2] WebPreferences are impossible to use in QML.
Modified: trunk/Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp (97743 => 97744)
--- trunk/Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp 2011-10-18 12:51:43 UTC (rev 97743)
+++ trunk/Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp 2011-10-18 12:52:32 UTC (rev 97744)
@@ -100,6 +100,9 @@
return handleMouseDoubleClickEvent(reinterpret_cast<QMouseEvent*>(ev));
case QEvent::Wheel:
return handleWheelEvent(reinterpret_cast<QWheelEvent*>(ev));
+ case QEvent::HoverLeave:
+ return handleHoverLeaveEvent(reinterpret_cast<QHoverEvent*>(ev));
+ case QEvent::HoverEnter: // Fall-through, for WebKit the distinction doesn't matter.
case QEvent::HoverMove:
return handleHoverMoveEvent(reinterpret_cast<QHoverEvent*>(ev));
case QEvent::DragEnter:
@@ -163,6 +166,14 @@
return ev->isAccepted();
}
+bool QDesktopWebPageProxy::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.
+ QHoverEvent fakeEvent(QEvent::HoverMove, QPoint(INT_MIN, INT_MIN), ev->oldPos());
+ return handleHoverMoveEvent(&fakeEvent);
+}
+
bool QDesktopWebPageProxy::handleHoverMoveEvent(QHoverEvent* ev)
{
QMouseEvent me(QEvent::MouseMove, ev->pos(), Qt::NoButton, Qt::NoButton, Qt::NoModifier);
Modified: trunk/Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.h (97743 => 97744)
--- trunk/Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.h 2011-10-18 12:51:43 UTC (rev 97743)
+++ trunk/Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.h 2011-10-18 12:52:32 UTC (rev 97744)
@@ -56,6 +56,7 @@
bool handleMouseReleaseEvent(QMouseEvent*);
bool handleMouseDoubleClickEvent(QMouseEvent*);
bool handleWheelEvent(QWheelEvent*);
+ bool handleHoverLeaveEvent(QHoverEvent*);
bool handleHoverMoveEvent(QHoverEvent*);
bool handleDragEnterEvent(QDragEnterEvent*);
bool handleDragLeaveEvent(QDragLeaveEvent*);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes