diff options
Diffstat (limited to 'src/graphicsitems/qxflickable.cpp')
-rw-r--r-- | src/graphicsitems/qxflickable.cpp | 25 |
1 files changed, 15 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; } |