From 81889f74aa8a815fbda1cfc649167ac85d6de432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Wed, 5 Jan 2011 14:13:49 +0100 Subject: Fix double click/tap issues. --- src/graphicsitems/qxflickable.cpp | 25 +++++++++++++++---------- src/graphicsitems/qxitem.cpp | 9 +++++++++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/graphicsitems/qxflickable.cpp b/src/graphicsitems/qxflickable.cpp index ce2ebc6..7055c2c 100644 --- a/src/graphicsitems/qxflickable.cpp +++ b/src/graphicsitems/qxflickable.cpp @@ -814,6 +814,7 @@ void QxFlickable::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { Q_D(QxFlickable); if (d->interactive) { + d->clearDelayedPress(); d->handleMouseMoveEvent(event); event->accept(); } else { @@ -825,7 +826,15 @@ void QxFlickable::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { Q_D(QxFlickable); if (d->interactive) { - d->clearDelayedPress(); + if (d->delayedPressEvent) { + d->stealMouse = false; + d->pressed = false; + setKeepMouseGrab(false); + QApplication::sendEvent(d->delayedPressTarget, d->delayedPressEvent); + QApplication::sendEvent(d->delayedPressTarget, event); + d->clearDelayedPress(); + return; + } d->handleMouseReleaseEvent(event); event->accept(); ungrabMouse(); @@ -922,15 +931,11 @@ void QxFlickable::timerEvent(QTimerEvent *event) if (event->timerId() == d->delayedPressTimer.timerId()) { d->delayedPressTimer.stop(); if (d->delayedPressEvent) { - QxItem *grabber = mouseGrabberItem(); - if (!grabber || grabber != this) { - // We replay the mouse press but the grabber we had might not be interessted by the event (e.g. overlay) - // so we reset the grabber - if (grabber == d->delayedPressTarget) - d->delayedPressTarget->ungrabMouse(); - //Use the event handler that will take care of finding the proper item to propagate the event - QApplication::sendEvent(QApplication::focusWidget(), d->delayedPressEvent); - } + d->stealMouse = false; + d->pressed = false; + setKeepMouseGrab(false); + d->delayedPressTarget->grabMouse(); + QApplication::sendEvent(d->delayedPressTarget, d->delayedPressEvent); delete d->delayedPressEvent; d->delayedPressEvent = 0; } diff --git a/src/graphicsitems/qxitem.cpp b/src/graphicsitems/qxitem.cpp index b297dcb..5b135c4 100644 --- a/src/graphicsitems/qxitem.cpp +++ b/src/graphicsitems/qxitem.cpp @@ -2601,6 +2601,15 @@ bool QxItem::event(QEvent *ev) case QEvent::FocusOut: d->focusChanged(hasFocus()); break; + case QEvent::GraphicsSceneMousePress: + mousePressEvent(static_cast(ev)); + break; + case QEvent::GraphicsSceneMouseRelease: + mouseReleaseEvent(static_cast(ev)); + break; + case QEvent::GraphicsSceneMouseMove: + mouseMoveEvent(static_cast(ev)); + break; default: break; } -- cgit v1.2.3