summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2009-04-24 04:40:01 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2009-04-24 04:40:01 (GMT)
commitb7451b45e43f1f21bc2b9e35c330f4f27225307d (patch)
tree3528b8ed9ac564e96dbe3aff224f5441afdb0182 /src/declarative
parent19a507c5cc8c178a0e00fa302f6315c4b18b50a5 (diff)
downloadQt-b7451b45e43f1f21bc2b9e35c330f4f27225307d.zip
Qt-b7451b45e43f1f21bc2b9e35c330f4f27225307d.tar.gz
Qt-b7451b45e43f1f21bc2b9e35c330f4f27225307d.tar.bz2
Add a QSimpleCanvasItem::ChildMouseFilter option
Child mouse filter only filters events sent to your children
Diffstat (limited to 'src/declarative')
-rw-r--r--src/declarative/canvas/qsimplecanvas.cpp51
-rw-r--r--src/declarative/canvas/qsimplecanvas_graphicsview.cpp33
-rw-r--r--src/declarative/canvas/qsimplecanvas_p.h7
-rw-r--r--src/declarative/canvas/qsimplecanvasitem.cpp1
-rw-r--r--src/declarative/canvas/qsimplecanvasitem.h15
-rw-r--r--src/declarative/canvas/qsimplecanvasitem_p.h2
-rw-r--r--src/declarative/fx/qfxflickable.cpp248
-rw-r--r--src/declarative/fx/qfxflickable_p.h4
8 files changed, 225 insertions, 136 deletions
diff --git a/src/declarative/canvas/qsimplecanvas.cpp b/src/declarative/canvas/qsimplecanvas.cpp
index 5eb6c60..5d35a2a 100644
--- a/src/declarative/canvas/qsimplecanvas.cpp
+++ b/src/declarative/canvas/qsimplecanvas.cpp
@@ -417,7 +417,7 @@ QGraphicsSceneMouseEvent *QSimpleCanvasPrivate::mouseEventToSceneMouseEvent(QMou
return me;
}
-bool QSimpleCanvasPrivate::deliverMousePress(QSimpleCanvasItem *base, QMouseEvent *e)
+bool QSimpleCanvasPrivate::deliverMousePress(QSimpleCanvasItem *base, QMouseEvent *e, bool seenChildFilter)
{
if(base->clipType()) {
QRectF br = base->boundingRect();
@@ -427,22 +427,25 @@ bool QSimpleCanvasPrivate::deliverMousePress(QSimpleCanvasItem *base, QMouseEven
}
const QList<QSimpleCanvasItem *> &children = base->d_func()->children;
+
+ if(base->options() & QSimpleCanvasItem::ChildMouseFilter)
+ seenChildFilter = true;
+
for(int ii = children.count() - 1; ii >= 0; --ii) {
if(children.at(ii)->visible() != 0.)
- if(deliverMousePress(children.at(ii), e))
+ if(deliverMousePress(children.at(ii), e, seenChildFilter))
return true;
}
- if(base->acceptedMouseButtons() & e->button()) {
+ if(base->acceptedMouseButtons() & e->button() || base->options() & QSimpleCanvasItem::ChildMouseFilter) {
+
QRectF br = base->boundingRect();
QPoint pos = base->mapFromScene(e->pos()).toPoint();
if(br.contains(pos)) {
QGraphicsSceneMouseEvent *me = mouseEventToSceneMouseEvent(e, pos);
- if (me->type() == QEvent::GraphicsSceneMousePress)
- base->mousePressEvent(me);
- else
- base->mouseDoubleClickEvent(me);
+
+ sendMouseEvent(base, me);
bool isAccepted = me->isAccepted();
delete me;
if(isAccepted) {
@@ -454,6 +457,36 @@ bool QSimpleCanvasPrivate::deliverMousePress(QSimpleCanvasItem *base, QMouseEven
return false;
}
+// Delivers e to item
+void QSimpleCanvasPrivate::sendMouseEvent(QSimpleCanvasItem *item, QGraphicsSceneMouseEvent *e)
+{
+ QSimpleCanvasItem *p = item->parent();
+ while(p) {
+ if(p->options() & QSimpleCanvasItem::ChildMouseFilter) {
+ if(p->mouseFilter(e))
+ return;
+ }
+ p = p->parent();
+ }
+ switch(e->type()) {
+ case QEvent::GraphicsSceneMousePress:
+ item->mousePressEvent(e);
+ break;
+ case QEvent::GraphicsSceneMouseRelease:
+ item->mouseReleaseEvent(e);
+ break;
+ case QEvent::GraphicsSceneMouseMove:
+ item->mouseMoveEvent(e);
+ break;
+ case QEvent::GraphicsSceneMouseDoubleClick:
+ item->mouseDoubleClickEvent(e);
+ break;
+ default:
+ break;
+ }
+}
+
+
QSimpleCanvasRootLayer::QSimpleCanvasRootLayer(QSimpleCanvas *c)
: _canvas(c)
{
@@ -665,7 +698,7 @@ void QSimpleCanvas::mouseMoveEvent(QMouseEvent *e)
} else if(d->isSimpleCanvas() && d->lastMouseItem) {
QPoint p = d->lastMouseItem->mapFromScene(e->pos()).toPoint();
QGraphicsSceneMouseEvent *me = d->mouseEventToSceneMouseEvent(e, p);
- d->lastMouseItem->mouseMoveEvent(me);
+ d->sendMouseEvent(d->lastMouseItem, me);
e->setAccepted(me->isAccepted());
delete me;
} else {
@@ -680,7 +713,7 @@ void QSimpleCanvas::mouseReleaseEvent(QMouseEvent *e)
} else if(d->isSimpleCanvas() && d->lastMouseItem) {
QPoint p = d->lastMouseItem->mapFromScene(e->pos()).toPoint();
QGraphicsSceneMouseEvent *me = d->mouseEventToSceneMouseEvent(e, p);
- d->lastMouseItem->mouseReleaseEvent(me);
+ d->sendMouseEvent(d->lastMouseItem, me);
d->lastMouseItem->mouseUngrabEvent();
e->setAccepted(me->isAccepted());
delete me;
diff --git a/src/declarative/canvas/qsimplecanvas_graphicsview.cpp b/src/declarative/canvas/qsimplecanvas_graphicsview.cpp
index 0f80128..e3cdf19 100644
--- a/src/declarative/canvas/qsimplecanvas_graphicsview.cpp
+++ b/src/declarative/canvas/qsimplecanvas_graphicsview.cpp
@@ -88,21 +88,54 @@ QRectF QSimpleGraphicsItem::boundingRect() const
void QSimpleGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
+ QSimpleCanvasItem *p = owner->parent();
+ while(p) {
+ if(p->options() & QSimpleCanvasItem::ChildMouseFilter) {
+ if(p->mouseFilter(event))
+ return;
+ }
+ p = p->parent();
+ }
owner->mousePressEvent(event);
}
void QSimpleGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
+ QSimpleCanvasItem *p = owner->parent();
+ while(p) {
+ if(p->options() & QSimpleCanvasItem::ChildMouseFilter) {
+ if(p->mouseFilter(event))
+ return;
+ }
+ p = p->parent();
+ }
owner->mouseReleaseEvent(event);
+ ungrabMouse();
}
void QSimpleGraphicsItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
+ QSimpleCanvasItem *p = owner->parent();
+ while(p) {
+ if(p->options() & QSimpleCanvasItem::ChildMouseFilter) {
+ if(p->mouseFilter(event))
+ return;
+ }
+ p = p->parent();
+ }
owner->mouseDoubleClickEvent(event);
}
void QSimpleGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
+ QSimpleCanvasItem *p = owner->parent();
+ while(p) {
+ if(p->options() & QSimpleCanvasItem::ChildMouseFilter) {
+ if(p->mouseFilter(event))
+ return;
+ }
+ p = p->parent();
+ }
owner->mouseMoveEvent(event);
}
diff --git a/src/declarative/canvas/qsimplecanvas_p.h b/src/declarative/canvas/qsimplecanvas_p.h
index 4c8b41e..44e5a7e 100644
--- a/src/declarative/canvas/qsimplecanvas_p.h
+++ b/src/declarative/canvas/qsimplecanvas_p.h
@@ -107,8 +107,8 @@ class QSimpleCanvasPrivate
public:
QSimpleCanvasPrivate(QSimpleCanvas *canvas)
: q(canvas), timer(0), root(0), lrpTime(0), canvasServer(0), focusItem(0),
- lastFocusItem(0), lastMouseItem(0), isSetup(false),
- view(0)
+ lastFocusItem(0), lastMouseItem(0),
+ isSetup(false), view(0)
#if defined(QFX_RENDER_OPENGL)
,egl(q, this), basicShadersInstance(0)
#endif
@@ -160,9 +160,10 @@ public:
void removeMouseFilter(QSimpleCanvasItem *);
QList<QSimpleCanvasItem *> mouseFilters;
bool filter(QMouseEvent *e);
- bool deliverMousePress(QSimpleCanvasItem *, QMouseEvent *);
+ bool deliverMousePress(QSimpleCanvasItem *, QMouseEvent *, bool = false);
QGraphicsSceneMouseEvent *mouseEventToSceneMouseEvent(QMouseEvent *, const QPoint &);
QSimpleCanvasItem *lastMouseItem;
+ void sendMouseEvent(QSimpleCanvasItem *, QGraphicsSceneMouseEvent *);
bool isSetup;
diff --git a/src/declarative/canvas/qsimplecanvasitem.cpp b/src/declarative/canvas/qsimplecanvasitem.cpp
index 95f7623..b7e3ef0 100644
--- a/src/declarative/canvas/qsimplecanvasitem.cpp
+++ b/src/declarative/canvas/qsimplecanvasitem.cpp
@@ -1287,6 +1287,7 @@ void QSimpleCanvasItem::setOptions(Options options, bool set)
d->gvAddMouseFilter();
else
d->gvRemoveMouseFilter();
+
} else {
QSimpleCanvas *c = canvas();
if(c) {
diff --git a/src/declarative/canvas/qsimplecanvasitem.h b/src/declarative/canvas/qsimplecanvasitem.h
index d51f2c8..9b010e8 100644
--- a/src/declarative/canvas/qsimplecanvasitem.h
+++ b/src/declarative/canvas/qsimplecanvasitem.h
@@ -82,13 +82,14 @@ public:
ClipToRect = 0x03 };
enum Option { NoOption = 0x00000000,
MouseFilter = 0x00000001,
- HoverEvents = 0x00000002,
- MouseEvents = 0x00000004,
- HasContents = 0x00000008,
- SimpleItem = 0x00000010,
- IsFocusPanel = 0x00000020,
- IsFocusRealm = 0x00000040,
- AcceptsInputMethods = 0x00000080};
+ ChildMouseFilter = 0x00000002,
+ HoverEvents = 0x00000004,
+ MouseEvents = 0x00000008,
+ HasContents = 0x00000010,
+ SimpleItem = 0x00000020,
+ IsFocusPanel = 0x00000040,
+ IsFocusRealm = 0x00000080,
+ AcceptsInputMethods = 0x00000100};
Q_DECLARE_FLAGS(Options, Option);
QSimpleCanvasItem(QSimpleCanvasItem *parent=0);
diff --git a/src/declarative/canvas/qsimplecanvasitem_p.h b/src/declarative/canvas/qsimplecanvasitem_p.h
index 7f66be5..7a90c24 100644
--- a/src/declarative/canvas/qsimplecanvasitem_p.h
+++ b/src/declarative/canvas/qsimplecanvasitem_p.h
@@ -137,7 +137,7 @@ public:
QSimpleCanvasItem::ClipType clip:3;
QSimpleCanvasItem::TransformOrigin origin:4;
- int options:8;
+ int options:9;
bool focusable:1;
bool wantsActiveFocusPanelPendingCanvas:1;
bool hasBeenActiveFocusPanel:1;
diff --git a/src/declarative/fx/qfxflickable.cpp b/src/declarative/fx/qfxflickable.cpp
index e35d6cf..5715116 100644
--- a/src/declarative/fx/qfxflickable.cpp
+++ b/src/declarative/fx/qfxflickable.cpp
@@ -111,8 +111,8 @@ void QFxFlickablePrivate::init()
_flick->setParent(q);
QObject::connect(&_tl, SIGNAL(updated()), q, SLOT(ticked()));
QObject::connect(&_tl, SIGNAL(completed()), q, SLOT(movementEnding()));
- q->setAcceptedMouseButtons(Qt::NoButton);
- q->setOptions(QSimpleCanvasItem::MouseFilter | QSimpleCanvasItem::MouseEvents);
+ q->setAcceptedMouseButtons(Qt::LeftButton);
+ q->setOptions(QSimpleCanvasItem::ChildMouseFilter | QSimpleCanvasItem::MouseEvents);
QObject::connect(_flick, SIGNAL(leftChanged()), q, SIGNAL(positionChanged()));
QObject::connect(_flick, SIGNAL(topChanged()), q, SIGNAL(positionChanged()));
QObject::connect(&elasticX, SIGNAL(updated()), q, SLOT(ticked()));
@@ -528,182 +528,203 @@ qreal QFxFlickable::visibleY() const
return -d->_moveY.value();
}
-void QFxFlickable::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void QFxFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
{
- Q_D(QFxFlickable);
- if (!d->locked && d->_tl.isActive() && (qAbs(d->velocityX) > 10 || qAbs(d->velocityY) > 10))
- d->stealMouse = true; // If we've been flicked then steal the click.
+ if (!locked && _tl.isActive() && (qAbs(velocityX) > 10 || qAbs(velocityY) > 10))
+ stealMouse = true; // If we've been flicked then steal the click.
else
- d->stealMouse = false;
- d->pressed = true;
- d->_tl.clear();
- d->velocityX = -1;
- d->velocityY = -1;
- d->lastPos = QPoint();
- d->lastPosTime.start();
- d->pressPos = event->pos();
- d->pressX = d->_moveX.value();
- d->pressY = d->_moveY.value();
- d->flicked = false;
- d->pressTime.start();
- if (d->dragMode == Elastic) {
- d->elasticX.clear();
- d->elasticY.clear();
+ stealMouse = false;
+ pressed = true;
+ _tl.clear();
+ velocityX = -1;
+ velocityY = -1;
+ lastPos = QPoint();
+ lastPosTime.start();
+ pressPos = event->pos();
+ pressX = _moveX.value();
+ pressY = _moveY.value();
+ flicked = false;
+ pressTime.start();
+ if (dragMode == QFxFlickable::Elastic) {
+ elasticX.clear();
+ elasticY.clear();
}
- d->velocityTime.start();
+ velocityTime.start();
}
-void QFxFlickable::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QFxFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
- Q_D(QFxFlickable);
- if (d->locked || d->lastPosTime.isNull())
+ Q_Q(QFxFlickable);
+ if (locked || lastPosTime.isNull())
return;
bool rejectY = false;
bool rejectX = false;
bool moved = false;
- if(yflick()) {
- int dy = int(event->pos().y() - d->pressPos.y());
- if (qAbs(dy) > FlickThreshold || d->pressTime.elapsed() > 200) {
- qreal newY = dy + d->pressY;
- const qreal minY = minYExtent();
- const qreal maxY = maxYExtent();
+ if(q->yflick()) {
+ int dy = int(event->pos().y() - pressPos.y());
+ if (qAbs(dy) > FlickThreshold || pressTime.elapsed() > 200) {
+ qreal newY = dy + pressY;
+ const qreal minY = q->minYExtent();
+ const qreal maxY = q->maxYExtent();
if(newY > minY)
newY = minY + (newY - minY) / 2;
if(newY < maxY && maxY - minY < 0)
newY = maxY + (newY - maxY) / 2;
- if(overShoot() || (newY <= minY && newY >= maxY)) {
- if (d->dragMode == Hard)
- d->_moveY.setValue(newY);
+ if(q->overShoot() || (newY <= minY && newY >= maxY)) {
+ if (dragMode == QFxFlickable::Hard)
+ _moveY.setValue(newY);
else
- d->elasticY.setValue(newY);
+ elasticY.setValue(newY);
moved = true;
- } else if (!overShoot())
+ } else if (!q->overShoot())
rejectY = true;
if (qAbs(dy) > FlickThreshold)
- d->stealMouse = true;
+ stealMouse = true;
}
}
- if(xflick()) {
- int dx = int(event->pos().x() - d->pressPos.x());
- if (qAbs(dx) > FlickThreshold || d->pressTime.elapsed() > 200) {
- qreal newX = dx + d->pressX;
- if(overShoot() || (newX <= minXExtent() && newX >= maxXExtent())) {
- if (d->dragMode == Hard)
- d->_moveX.setValue(newX);
+ if(q->xflick()) {
+ int dx = int(event->pos().x() - pressPos.x());
+ if (qAbs(dx) > FlickThreshold || pressTime.elapsed() > 200) {
+ qreal newX = dx + pressX;
+ if(q->overShoot() || (newX <= q->minXExtent() && newX >= q->maxXExtent())) {
+ if (dragMode == QFxFlickable::Hard)
+ _moveX.setValue(newX);
else
- d->elasticX.setValue(newX);
+ elasticX.setValue(newX);
moved = true;
- } else if (!overShoot())
+ } else if (!q->overShoot())
rejectX = true;
if (qAbs(dx) > FlickThreshold)
- d->stealMouse = true;
+ stealMouse = true;
}
}
- if(!d->lastPos.isNull()) {
- qreal elapsed = qreal(d->lastPosTime.restart()) / 1000.;
+ if(!lastPos.isNull()) {
+ qreal elapsed = qreal(lastPosTime.restart()) / 1000.;
if(elapsed <= 0)
elapsed = 1;
- if(yflick()) {
- qreal diff = event->pos().y() - d->lastPos.y();
- d->velocityY = diff / elapsed;
+ if(q->yflick()) {
+ qreal diff = event->pos().y() - lastPos.y();
+ velocityY = diff / elapsed;
}
- if(xflick()) {
- qreal diff = event->pos().x() - d->lastPos.x();
- d->velocityX = diff / elapsed;
+ if(q->xflick()) {
+ qreal diff = event->pos().x() - lastPos.x();
+ velocityX = diff / elapsed;
}
}
- if(rejectY) d->velocityY = 0;
- if(rejectX) d->velocityX = 0;
+ if(rejectY) velocityY = 0;
+ if(rejectX) velocityX = 0;
if (moved) {
- viewportMoved();
- movementStarting();
+ q->viewportMoved();
+ q->movementStarting();
}
- d->lastPos = event->pos();
+ lastPos = event->pos();
}
-void QFxFlickable::mouseReleaseEvent(QGraphicsSceneMouseEvent *)
+void QFxFlickablePrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
- Q_D(QFxFlickable);
- d->pressed = false;
- if (d->lastPosTime.isNull())
+ Q_Q(QFxFlickable);
+
+ pressed = false;
+ if (lastPosTime.isNull())
return;
- if (d->dragMode == Elastic) {
- d->elasticY.clear();
- d->elasticX.clear();
+ if (dragMode == QFxFlickable::Elastic) {
+ elasticY.clear();
+ elasticX.clear();
}
- d->vTime = d->_tl.time();
- if(qAbs(d->velocityY) > 10) {
+ vTime = _tl.time();
+ if(qAbs(velocityY) > 10) {
qreal maxDistance = -1;
// -ve velocity means list is moving up
- if(d->velocityY > 0) {
- if(d->_moveY.value() < minYExtent())
- maxDistance = qAbs(minYExtent() -d->_moveY.value() + (d->overShoot?30:0));
+ if(velocityY > 0) {
+ if(_moveY.value() < q->minYExtent())
+ maxDistance = qAbs(q->minYExtent() -_moveY.value() + (overShoot?30:0));
} else {
- if(d->_moveY.value() > maxYExtent())
- maxDistance = qAbs(maxYExtent() - d->_moveY.value()) + (d->overShoot?30:0);
+ if(_moveY.value() > q->maxYExtent())
+ maxDistance = qAbs(q->maxYExtent() - _moveY.value()) + (overShoot?30:0);
}
if(maxDistance > 0) {
- qreal v = d->velocityY;
- if(d->maxVelocity != -1 && d->maxVelocity < qAbs(v)) {
+ qreal v = velocityY;
+ if(maxVelocity != -1 && maxVelocity < qAbs(v)) {
if(v < 0)
- v = -d->maxVelocity;
+ v = -maxVelocity;
else
- v = d->maxVelocity;
+ v = maxVelocity;
}
- d->_tl.accel(d->_moveY, v, 500, maxDistance);
- d->_tl.execute(d->fixupYEvent);
- d->flicked = true;
- emit flickingChanged();
- emit flickStarted();
+ _tl.accel(_moveY, v, 500, maxDistance);
+ _tl.execute(fixupYEvent);
+ flicked = true;
+ emit q->flickingChanged();
+ emit q->flickStarted();
} else {
- d->fixupY();
+ fixupY();
}
} else {
- d->fixupY();
+ fixupY();
}
- if(qAbs(d->velocityX) > 10) {
+ if(qAbs(velocityX) > 10) {
qreal maxDistance = -1;
// -ve velocity means list is moving up
- if(d->velocityX > 0) {
- if(d->_moveX.value() < minXExtent())
- maxDistance = qAbs(minXExtent()) -d->_moveX.value() + (d->overShoot?30:0);
+ if(velocityX > 0) {
+ if(_moveX.value() < q->minXExtent())
+ maxDistance = qAbs(q->minXExtent()) -_moveX.value() + (overShoot?30:0);
} else {
- if(d->_moveX.value() > maxXExtent())
- maxDistance = qAbs(maxXExtent() - d->_moveX.value()) + (d->overShoot?30:0);
+ if(_moveX.value() > q->maxXExtent())
+ maxDistance = qAbs(q->maxXExtent() - _moveX.value()) + (overShoot?30:0);
}
if(maxDistance > 0) {
- qreal v = d->velocityX;
- if(d->maxVelocity != -1 && d->maxVelocity < qAbs(v)) {
+ qreal v = velocityX;
+ if(maxVelocity != -1 && maxVelocity < qAbs(v)) {
if(v < 0)
- v = -d->maxVelocity;
+ v = -maxVelocity;
else
- v = d->maxVelocity;
+ v = maxVelocity;
}
- d->_tl.accel(d->_moveX, v, 500, maxDistance);
- d->_tl.execute(d->fixupXEvent);
- d->flicked = true;
- emit flickingChanged();
- emit flickStarted();
+ _tl.accel(_moveX, v, 500, maxDistance);
+ _tl.execute(fixupXEvent);
+ flicked = true;
+ emit q->flickingChanged();
+ emit q->flickStarted();
} else {
- d->fixupX();
+ fixupX();
}
} else {
- d->fixupX();
+ fixupX();
}
- d->stealMouse = false;
- d->lastPosTime = QTime();
+ stealMouse = false;
+ lastPosTime = QTime();
+
+ if(!_tl.isActive())
+ q->movementEnding();
+}
- if(!d->_tl.isActive())
- movementEnding();
+void QFxFlickable::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_D(QFxFlickable);
+ d->handleMousePressEvent(event);
+ event->accept();
+}
+
+void QFxFlickable::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_D(QFxFlickable);
+ d->handleMouseMoveEvent(event);
+ event->accept();
+}
+
+void QFxFlickable::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_D(QFxFlickable);
+ d->handleMouseReleaseEvent(event);
+ event->accept();
}
qreal QFxFlickable::minYExtent() const
@@ -984,20 +1005,20 @@ bool QFxFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event)
switch(mouseEvent.type()) {
case QEvent::GraphicsSceneMouseMove:
- mouseMoveEvent(&mouseEvent);
+ d->handleMouseMoveEvent(&mouseEvent);
break;
case QEvent::GraphicsSceneMousePress:
- mousePressEvent(&mouseEvent);
+ d->handleMousePressEvent(&mouseEvent);
break;
case QEvent::GraphicsSceneMouseRelease:
- mouseReleaseEvent(&mouseEvent);
+ d->handleMouseReleaseEvent(&mouseEvent);
break;
default:
break;
}
grabber = static_cast<QFxItem*>(mouseGrabberItem());
if (grabber && d->stealMouse && !grabber->keepMouseGrab())
- mouseGrabberItem()->ungrabMouse();
+ grabMouse();
return d->stealMouse;
} else if (!d->lastPosTime.isNull()) {
@@ -1014,12 +1035,7 @@ bool QFxFlickable::mouseFilter(QGraphicsSceneMouseEvent *e)
case QEvent::GraphicsSceneMousePress:
case QEvent::GraphicsSceneMouseMove:
case QEvent::GraphicsSceneMouseRelease:
- {
- bool ret = sendMouseEvent(e);
- if (e->type() == QEvent::GraphicsSceneMouseRelease)
- return ret;
- break;
- }
+ return sendMouseEvent(e);
default:
break;
}
diff --git a/src/declarative/fx/qfxflickable_p.h b/src/declarative/fx/qfxflickable_p.h
index ddbfb31..59450e0 100644
--- a/src/declarative/fx/qfxflickable_p.h
+++ b/src/declarative/fx/qfxflickable_p.h
@@ -151,6 +151,10 @@ public:
qreal pageYPosition;
qreal pageHeight;
+ void handleMousePressEvent(QGraphicsSceneMouseEvent *);
+ void handleMouseMoveEvent(QGraphicsSceneMouseEvent *);
+ void handleMouseReleaseEvent(QGraphicsSceneMouseEvent *);
+
// flickableData property
void data_removeAt(int);
int data_count() const;