summaryrefslogtreecommitdiffstats
path: root/src/graphicsitems/qxflickable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphicsitems/qxflickable.cpp')
-rw-r--r--src/graphicsitems/qxflickable.cpp25
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;
}