summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2013-07-31 16:57:26 +0200
committerJocelyn Turcotte <jocelyn.turcotte@digia.com>2013-08-01 12:20:53 +0200
commit2934694fec0acb21f759e288e6943bbf206edecf (patch)
treee79fb79b5449865ea539b25363a0232ad32cad59 /lib
parenta3cc1b314270041b0746edb3359756188ff1487c (diff)
Forward mouse hover events to the page.
Change-Id: I5ce13af04de8520bb0ab93c48a2493822aa42294 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/quick/render_widget_host_view_qt_delegate_quick.cpp6
-rw-r--r--lib/quick/render_widget_host_view_qt_delegate_quick.h1
-rw-r--r--lib/render_widget_host_view_qt.cpp10
-rw-r--r--lib/render_widget_host_view_qt.h2
-rw-r--r--lib/web_event_factory.cpp19
-rw-r--r--lib/web_event_factory.h4
-rw-r--r--lib/widgets/render_widget_host_view_qt_delegate_widget.cpp1
7 files changed, 42 insertions, 1 deletions
diff --git a/lib/quick/render_widget_host_view_qt_delegate_quick.cpp b/lib/quick/render_widget_host_view_qt_delegate_quick.cpp
index 0c67f6e2f..2c3f09647 100644
--- a/lib/quick/render_widget_host_view_qt_delegate_quick.cpp
+++ b/lib/quick/render_widget_host_view_qt_delegate_quick.cpp
@@ -48,6 +48,7 @@ RenderWidgetHostViewQtDelegateQuick::RenderWidgetHostViewQtDelegateQuick(QQuickI
: QQuickPaintedItem(parent)
{
setAcceptedMouseButtons(Qt::AllButtons);
+ setAcceptHoverEvents(true);
}
QRectF RenderWidgetHostViewQtDelegateQuick::screenRect() const
@@ -164,3 +165,8 @@ void RenderWidgetHostViewQtDelegateQuick::touchEvent(QTouchEvent *event)
{
forwardEvent(event);
}
+
+void RenderWidgetHostViewQtDelegateQuick::hoverMoveEvent(QHoverEvent *event)
+{
+ forwardEvent(event);
+}
diff --git a/lib/quick/render_widget_host_view_qt_delegate_quick.h b/lib/quick/render_widget_host_view_qt_delegate_quick.h
index 38ddf0146..fca595376 100644
--- a/lib/quick/render_widget_host_view_qt_delegate_quick.h
+++ b/lib/quick/render_widget_host_view_qt_delegate_quick.h
@@ -90,6 +90,7 @@ public:
void keyReleaseEvent(QKeyEvent*);
void wheelEvent(QWheelEvent*);
void touchEvent(QTouchEvent*);
+ void hoverMoveEvent(QHoverEvent*);
protected:
void updatePolish();
diff --git a/lib/render_widget_host_view_qt.cpp b/lib/render_widget_host_view_qt.cpp
index ad6544afa..41b8fe1a8 100644
--- a/lib/render_widget_host_view_qt.cpp
+++ b/lib/render_widget_host_view_qt.cpp
@@ -130,6 +130,11 @@ bool RenderWidgetHostViewQt::handleEvent(QEvent* event) {
case QEvent::TouchEnd:
handleTouchEvent(static_cast<QTouchEvent*>(event));
break;
+ case QEvent::HoverEnter:
+ case QEvent::HoverLeave:
+ case QEvent::HoverMove:
+ handleHoverEvent(static_cast<QHoverEvent*>(event));
+ break;
case QEvent::FocusIn:
case QEvent::FocusOut:
handleFocusEvent(static_cast<QFocusEvent*>(event));
@@ -609,6 +614,11 @@ void RenderWidgetHostViewQt::handleTouchEvent(QTouchEvent *ev)
RemoveExpiredMappings(ev);
}
+void RenderWidgetHostViewQt::handleHoverEvent(QHoverEvent *ev)
+{
+ m_host->ForwardMouseEvent(WebEventFactory::toWebMouseEvent(ev));
+}
+
void RenderWidgetHostViewQt::handleFocusEvent(QFocusEvent *ev)
{
if (ev->gotFocus()) {
diff --git a/lib/render_widget_host_view_qt.h b/lib/render_widget_host_view_qt.h
index 22fe22512..dbbb89339 100644
--- a/lib/render_widget_host_view_qt.h
+++ b/lib/render_widget_host_view_qt.h
@@ -54,6 +54,7 @@
class BackingStoreQt;
class QEvent;
class QFocusEvent;
+class QHoverEvent;
class QKeyEvent;
class QMouseEvent;
class QTouchEvent;
@@ -139,6 +140,7 @@ public:
void handleKeyEvent(QKeyEvent*);
void handleWheelEvent(QWheelEvent*);
void handleTouchEvent(QTouchEvent*);
+ void handleHoverEvent(QHoverEvent*);
void handleFocusEvent(QFocusEvent*);
#if defined(OS_MACOSX)
diff --git a/lib/web_event_factory.cpp b/lib/web_event_factory.cpp
index 8ba4a159d..34b587f75 100644
--- a/lib/web_event_factory.cpp
+++ b/lib/web_event_factory.cpp
@@ -499,6 +499,10 @@ static WebInputEvent::Type webEventTypeForEvent(const QEvent* event)
return WebInputEvent::MouseDown;
case QEvent::MouseButtonRelease:
return WebInputEvent::MouseUp;
+ case QEvent::Enter:
+ return WebInputEvent::MouseEnter;
+ case QEvent::Leave:
+ return WebInputEvent::MouseLeave;
case QEvent::MouseMove:
return WebInputEvent::MouseMove;
case QEvent::Wheel:
@@ -507,6 +511,8 @@ static WebInputEvent::Type webEventTypeForEvent(const QEvent* event)
return WebInputEvent::KeyDown;
case QEvent::KeyRelease:
return WebInputEvent::KeyUp;
+ case QEvent::HoverMove:
+ return WebInputEvent::MouseMove;
case QEvent::TouchBegin:
return WebInputEvent::TouchStart;
case QEvent::TouchUpdate:
@@ -552,6 +558,19 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev)
return webKitEvent;
}
+WebMouseEvent WebEventFactory::toWebMouseEvent(QHoverEvent *ev)
+{
+ WebMouseEvent webKitEvent;
+ webKitEvent.timeStampSeconds = currentTimeForEvent(ev);
+ webKitEvent.modifiers = modifiersForEvent(ev);
+
+ webKitEvent.x = webKitEvent.windowX = ev->pos().x();
+ webKitEvent.y = webKitEvent.windowY = ev->pos().y();
+
+ webKitEvent.type = webEventTypeForEvent(ev);
+ return webKitEvent;
+}
+
WebKit::WebMouseWheelEvent WebEventFactory::toWebWheelEvent(QWheelEvent *ev)
{
WebMouseWheelEvent webEvent;
diff --git a/lib/web_event_factory.h b/lib/web_event_factory.h
index bacb7132c..c2bb5f718 100644
--- a/lib/web_event_factory.h
+++ b/lib/web_event_factory.h
@@ -45,14 +45,16 @@
#include "content/public/browser/native_web_keyboard_event.h"
#include "third_party/WebKit/public/web/WebInputEvent.h"
-class QMouseEvent;
+class QHoverEvent;
class QKeyEvent;
+class QMouseEvent;
class QWheelEvent;
class WebEventFactory {
public:
static WebKit::WebMouseEvent toWebMouseEvent(QMouseEvent*);
+ static WebKit::WebMouseEvent toWebMouseEvent(QHoverEvent*);
static WebKit::WebMouseWheelEvent toWebWheelEvent(QWheelEvent*);
static content::NativeWebKeyboardEvent toWebKeyboardEvent(QKeyEvent*);
};
diff --git a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp
index ee6d553c9..c084a35dd 100644
--- a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp
+++ b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp
@@ -50,6 +50,7 @@ RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(QWidg
: QWidget(parent)
{
setFocusPolicy(Qt::ClickFocus);
+ setMouseTracking(true);
setAttribute(Qt::WA_AcceptTouchEvents);
setAttribute(Qt::WA_OpaquePaintEvent);