aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquicklistview.cpp
diff options
context:
space:
mode:
authorBea Lam <bea.lam@nokia.com>2012-06-04 13:34:57 +1000
committerQt by Nokia <qt-info@nokia.com>2012-06-06 10:14:01 +0200
commitc37c4215b0cfd31967b5799ebb0f0e78a55f7e85 (patch)
treee4bc695f80093b598c325ab530ed61605b79a943 /src/quick/items/qquicklistview.cpp
parent734c8ffbd361467d01eb278e9e289795f7139e94 (diff)
Don't emit moving and flicking signals unnecessarily
The moving and flicking signals should only be emitted once when the view has been moved/flicked both vertically and horizontally. (This was already done correctly for the dragging signals.) Also changes QQuickFlickable::flick() to return bool instead of void. Subclasses no longer emit the flicking signals but call flickingStarted() instead. Also splits the tst_qquickflickable::movingAndDragging() test up into several tests. Change-Id: Ie527568a9702049dd0bcda18c2eb3e43d8938a18 Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items/qquicklistview.cpp')
-rw-r--r--src/quick/items/qquicklistview.cpp28
1 files changed, 8 insertions, 20 deletions
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index 48cdee8ea2..e2de19b498 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -132,7 +132,7 @@ public:
void itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry);
virtual void fixupPosition();
virtual void fixup(AxisData &data, qreal minExtent, qreal maxExtent);
- virtual void flick(QQuickItemViewPrivate::AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
+ virtual bool flick(QQuickItemViewPrivate::AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
QQuickTimeLineCallback::Callback fixupCallback, qreal velocity);
QQuickListView::Orientation orient;
@@ -1471,17 +1471,14 @@ void QQuickListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal maxExte
fixupMode = Normal;
}
-void QQuickListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
+bool QQuickListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
QQuickTimeLineCallback::Callback fixupCallback, qreal velocity)
{
- Q_Q(QQuickListView);
-
data.fixingUp = false;
moveReason = Mouse;
if ((!haveHighlightRange || highlightRange != QQuickListView::StrictlyEnforceRange) && snapMode == QQuickListView::NoSnap) {
correctFlick = true;
- QQuickItemViewPrivate::flick(data, minExtent, maxExtent, vSize, fixupCallback, velocity);
- return;
+ return QQuickItemViewPrivate::flick(data, minExtent, maxExtent, vSize, fixupCallback, velocity);
}
qreal maxDistance = 0;
qreal dataValue = isContentFlowReversed() ? -data.move.value()+size() : data.move.value();
@@ -1587,19 +1584,8 @@ void QQuickListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExte
timeline.reset(data.move);
timeline.accel(data.move, v, accel, maxDistance + overshootDist);
timeline.callback(QQuickTimeLineCallback(&data.move, fixupCallback, this));
- if (!hData.flicking && q->xflick()) {
- hData.flicking = true;
- emit q->flickingChanged();
- emit q->flickingHorizontallyChanged();
- emit q->flickStarted();
- }
- if (!vData.flicking && q->yflick()) {
- vData.flicking = true;
- emit q->flickingChanged();
- emit q->flickingVerticallyChanged();
- emit q->flickStarted();
- }
correctFlick = true;
+ return true;
} else {
// reevaluate the target boundary.
qreal newtarget = data.flickTarget;
@@ -1615,7 +1601,7 @@ void QQuickListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExte
if (newtarget == data.flickTarget) { // boundary unchanged - nothing to do
if (qAbs(velocity) < MinimumFlickVelocity)
correctFlick = false;
- return;
+ return false;
}
data.flickTarget = newtarget;
qreal dist = -newtarget + data.move.value();
@@ -1623,16 +1609,18 @@ void QQuickListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExte
correctFlick = false;
timeline.reset(data.move);
fixup(data, minExtent, maxExtent);
- return;
+ return false;
}
timeline.reset(data.move);
timeline.accelDistance(data.move, v, -dist);
timeline.callback(QQuickTimeLineCallback(&data.move, fixupCallback, this));
+ return false;
}
} else {
correctFlick = false;
timeline.reset(data.move);
fixup(data, minExtent, maxExtent);
+ return false;
}
}