From d87e12f6d5c120b70d7182e20524fcee72db7cba Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Mon, 18 Oct 2010 13:51:08 +1000 Subject: ListView.visibleArea.heightRatio should not emit a signal when it does not change. Task-number: QTBUG-14492 Reviewed-by: Michael Brasser --- .../graphicsitems/qdeclarativeflickable.cpp | 25 ++++++++++++++++------ .../graphicsitems/qdeclarativeflickable_p.h | 1 - .../graphicsitems/qdeclarativeflickable_p_p.h | 13 ++++++----- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 001abca..2e5a43d 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -85,7 +85,11 @@ qreal QDeclarativeFlickableVisibleArea::yPosition() const void QDeclarativeFlickableVisibleArea::updateVisible() { QDeclarativeFlickablePrivate *p = static_cast(QGraphicsItemPrivate::get(flickable)); - bool pageChange = false; + + bool changeX = false; + bool changeY = false; + bool changeWidth = false; + bool changeHeight = false; // Vertical const qreal viewheight = flickable->height(); @@ -95,11 +99,11 @@ void QDeclarativeFlickableVisibleArea::updateVisible() if (pageSize != m_heightRatio) { m_heightRatio = pageSize; - pageChange = true; + changeHeight = true; } if (pagePos != m_yPosition) { m_yPosition = pagePos; - pageChange = true; + changeY = true; } // Horizontal @@ -110,14 +114,21 @@ void QDeclarativeFlickableVisibleArea::updateVisible() if (pageSize != m_widthRatio) { m_widthRatio = pageSize; - pageChange = true; + changeWidth = true; } if (pagePos != m_xPosition) { m_xPosition = pagePos; - pageChange = true; + changeX = true; } - if (pageChange) - emit pageChanged(); + + if (changeX) + emit xPositionChanged(m_xPosition); + if (changeY) + emit yPositionChanged(m_yPosition); + if (changeWidth) + emit widthRatioChanged(m_widthRatio); + if (changeHeight) + emit heightRatioChanged(m_heightRatio); } diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p.h index 44f2bcf..4fb9c25 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable_p.h +++ b/src/declarative/graphicsitems/qdeclarativeflickable_p.h @@ -163,7 +163,6 @@ Q_SIGNALS: void horizontalVelocityChanged(); void verticalVelocityChanged(); void isAtBoundaryChanged(); - void pageChanged(); void flickableDirectionChanged(); void interactiveChanged(); void boundsBehaviorChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h index beee741..afefde2 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h @@ -182,10 +182,10 @@ class QDeclarativeFlickableVisibleArea : public QObject { Q_OBJECT - Q_PROPERTY(qreal xPosition READ xPosition NOTIFY pageChanged) - Q_PROPERTY(qreal yPosition READ yPosition NOTIFY pageChanged) - Q_PROPERTY(qreal widthRatio READ widthRatio NOTIFY pageChanged) - Q_PROPERTY(qreal heightRatio READ heightRatio NOTIFY pageChanged) + Q_PROPERTY(qreal xPosition READ xPosition NOTIFY xPositionChanged) + Q_PROPERTY(qreal yPosition READ yPosition NOTIFY yPositionChanged) + Q_PROPERTY(qreal widthRatio READ widthRatio NOTIFY widthRatioChanged) + Q_PROPERTY(qreal heightRatio READ heightRatio NOTIFY heightRatioChanged) public: QDeclarativeFlickableVisibleArea(QDeclarativeFlickable *parent=0); @@ -198,7 +198,10 @@ public: void updateVisible(); signals: - void pageChanged(); + void xPositionChanged(qreal xPosition); + void yPositionChanged(qreal yPosition); + void widthRatioChanged(qreal widthRatio); + void heightRatioChanged(qreal heightRatio); private: QDeclarativeFlickable *flickable; -- cgit v0.12