From d49648884774f320473427fcea52a51ac2a4cca5 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Mon, 21 Dec 2009 09:43:33 +1000 Subject: Fix Flickable within Flickable, with parent flickable !interactive. --- .../graphicsitems/qmlgraphicsflickable.cpp | 20 ++++++++++++-------- .../graphicsitems/qmlgraphicsflickable_p.h | 3 ++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/declarative/graphicsitems/qmlgraphicsflickable.cpp b/src/declarative/graphicsitems/qmlgraphicsflickable.cpp index 393edb6..ed70b14 100644 --- a/src/declarative/graphicsitems/qmlgraphicsflickable.cpp +++ b/src/declarative/graphicsitems/qmlgraphicsflickable.cpp @@ -498,13 +498,16 @@ bool QmlGraphicsFlickable::isInteractive() const void QmlGraphicsFlickable::setInteractive(bool interactive) { Q_D(QmlGraphicsFlickable); - d->interactive = interactive; - if (!interactive && d->flicked) { - d->timeline.clear(); - d->vTime = d->timeline.time(); - d->flicked = false; - emit flickingChanged(); - emit flickEnded(); + if (interactive != d->interactive) { + d->interactive = interactive; + if (!interactive && d->flicked) { + d->timeline.clear(); + d->vTime = d->timeline.time(); + d->flicked = false; + emit flickingChanged(); + emit flickEnded(); + } + emit interactiveChanged(); } } @@ -1147,7 +1150,8 @@ bool QmlGraphicsFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event) bool QmlGraphicsFlickable::sceneEventFilter(QGraphicsItem *i, QEvent *e) { - if (!isVisible()) + Q_D(QmlGraphicsFlickable); + if (!isVisible() || !d->interactive) return QmlGraphicsItem::sceneEventFilter(i, e); switch (e->type()) { case QEvent::GraphicsSceneMousePress: diff --git a/src/declarative/graphicsitems/qmlgraphicsflickable_p.h b/src/declarative/graphicsitems/qmlgraphicsflickable_p.h index aa29f3e..df6f6b1 100644 --- a/src/declarative/graphicsitems/qmlgraphicsflickable_p.h +++ b/src/declarative/graphicsitems/qmlgraphicsflickable_p.h @@ -72,7 +72,7 @@ class Q_DECLARATIVE_EXPORT QmlGraphicsFlickable : public QmlGraphicsItem Q_PROPERTY(bool flicking READ isFlicking NOTIFY flickingChanged) Q_PROPERTY(FlickDirection flickDirection READ flickDirection WRITE setFlickDirection NOTIFY flickDirectionChanged) - Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive) + Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged) Q_PROPERTY(int pressDelay READ pressDelay WRITE setPressDelay) Q_PROPERTY(bool atXEnd READ isAtXEnd NOTIFY isAtBoundaryChanged) @@ -159,6 +159,7 @@ Q_SIGNALS: void isAtBoundaryChanged(); void pageChanged(); void flickDirectionChanged(); + void interactiveChanged(); protected: virtual bool sceneEventFilter(QGraphicsItem *, QEvent *); -- cgit v0.12