summaryrefslogtreecommitdiffstats
path: root/lib/render_widget_host_view_qt.cpp
diff options
context:
space:
mode:
authorMichael BrĂ¼ning <michael.bruning@digia.com>2013-09-13 12:46:16 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-16 17:03:56 +0200
commite0a9f95d5b710664b115a99317fcabd7950686c7 (patch)
tree462248f84385f5ba233ba02295f8b3bdb0e5b88e /lib/render_widget_host_view_qt.cpp
parente0653be7a315dc0b66af35c340a094de8a284117 (diff)
Implement multiple mouse click detection.
Fixes the ASSERT we were seeing on double clicks and implements detection for triple, quadruple etc. clicks. Double mouse clicks forwarded from QMouseEvent are swallowed. Change-Id: I9be83f809805ab3dea7a508b648046238ce36a90 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'lib/render_widget_host_view_qt.cpp')
-rw-r--r--lib/render_widget_host_view_qt.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/lib/render_widget_host_view_qt.cpp b/lib/render_widget_host_view_qt.cpp
index 692592469..99bf94653 100644
--- a/lib/render_widget_host_view_qt.cpp
+++ b/lib/render_widget_host_view_qt.cpp
@@ -57,9 +57,11 @@
#include <QEvent>
#include <QFocusEvent>
+#include <QGuiApplication>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QScreen>
+#include <QStyleHints>
#include <QWheelEvent>
#include <QWindow>
@@ -664,9 +666,26 @@ bool RenderWidgetHostViewQt::IsPopup() const
return popup_type_ != WebKit::WebPopupTypeNone;
}
-void RenderWidgetHostViewQt::handleMouseEvent(QMouseEvent* ev)
+void RenderWidgetHostViewQt::handleMouseEvent(QMouseEvent* event)
{
- m_host->ForwardMouseEvent(WebEventFactory::toWebMouseEvent(ev));
+ int eventType = event->type();
+ if (eventType == QEvent::MouseButtonDblClick)
+ return;
+
+ WebKit::WebMouseEvent webEvent = WebEventFactory::toWebMouseEvent(event);
+ if (eventType == QMouseEvent::MouseButtonPress) {
+ if (event->button() != m_clickHelper.lastPressButton
+ || (event->timestamp() - m_clickHelper.lastPressTimestamp > static_cast<ulong>(qGuiApp->styleHints()->mouseDoubleClickInterval()))
+ || (event->pos() - m_clickHelper.lastPressPosition).manhattanLength() > qGuiApp->styleHints()->startDragDistance())
+ m_clickHelper.clickCounter = 0;
+
+ m_clickHelper.lastPressTimestamp = event->timestamp();
+ webEvent.clickCount = ++m_clickHelper.clickCounter;
+ m_clickHelper.lastPressButton = event->button();
+ m_clickHelper.lastPressPosition = QPointF(event->pos()).toPoint();
+ }
+
+ m_host->ForwardMouseEvent(webEvent);
}
void RenderWidgetHostViewQt::handleKeyEvent(QKeyEvent *ev)