summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Nilsen <bjorn.nilsen@nokia.com>2011-01-05 14:13:49 +0100
committerBjørn Erik Nilsen <bjorn.nilsen@nokia.com>2011-01-05 14:13:49 +0100
commit81889f74aa8a815fbda1cfc649167ac85d6de432 (patch)
tree092d7c0889bc08cb949dc94896adc90282658b8d
parent785ea734068275783d39b267e76db3729f6312d9 (diff)
Fix double click/tap issues.
-rw-r--r--src/graphicsitems/qxflickable.cpp25
-rw-r--r--src/graphicsitems/qxitem.cpp9
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<QGraphicsSceneMouseEvent *>(ev));
+ break;
+ case QEvent::GraphicsSceneMouseRelease:
+ mouseReleaseEvent(static_cast<QGraphicsSceneMouseEvent *>(ev));
+ break;
+ case QEvent::GraphicsSceneMouseMove:
+ mouseMoveEvent(static_cast<QGraphicsSceneMouseEvent *>(ev));
+ break;
default:
break;
}