diff options
author | Michael BrĂ¼ning <michael.bruning@digia.com> | 2013-09-13 12:46:16 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-16 17:03:56 +0200 |
commit | e0a9f95d5b710664b115a99317fcabd7950686c7 (patch) | |
tree | 462248f84385f5ba233ba02295f8b3bdb0e5b88e /lib/render_widget_host_view_qt.cpp | |
parent | e0653be7a315dc0b66af35c340a094de8a284117 (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.cpp | 23 |
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) |