diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-10-03 11:20:14 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-10-03 13:31:32 +0000 |
commit | b13bafec9ca34aa12b4ba9fbc6bf0165957f9b37 (patch) | |
tree | 8a16936c25ee40baea19146da2ec9e04b6cdeda2 /src/quicktemplates2/qquicktumbler.cpp | |
parent | 8aaa72c1035940eb290de9ba16513b2dafe5248c (diff) | |
parent | b6cfb4a1e30598a6176f9bbfdbd1495b37c7f59a (diff) |
Merge remote-tracking branch 'origin/5.7' into 5.8
Conflicts:
examples/quickcontrols2/gallery/gallery.qrc
src/imports/calendar/doc/snippets/qtlabscalendar-calendarmodel.qml
src/imports/calendar/doc/snippets/qtlabscalendar-dayofweekrow-layout.qml
src/imports/calendar/doc/snippets/qtlabscalendar-dayofweekrow.qml
src/imports/calendar/doc/snippets/qtlabscalendar-monthgrid-layout.qml
src/imports/calendar/doc/snippets/qtlabscalendar-monthgrid.qml
src/imports/calendar/doc/snippets/qtlabscalendar-weeknumbercolumn-layout.qml
src/imports/calendar/doc/snippets/qtlabscalendar-weeknumbercolumn.qml
src/imports/controls/doc/qtquickcontrols2.qdocconf
src/imports/controls/doc/snippets/qtlabscalendar-calendarmodel.qml
src/imports/controls/doc/snippets/qtlabscalendar-dayofweekrow-layout.qml
src/imports/controls/doc/snippets/qtlabscalendar-dayofweekrow.qml
src/imports/controls/doc/snippets/qtlabscalendar-monthgrid-layout.qml
src/imports/controls/doc/snippets/qtlabscalendar-monthgrid.qml
src/imports/controls/doc/snippets/qtlabscalendar-weeknumbercolumn-layout.qml
src/imports/controls/doc/snippets/qtlabscalendar-weeknumbercolumn.qml
src/imports/controls/doc/snippets/screenshots/qtlabscalendar-calendarmodel.qml
src/imports/controls/doc/snippets/screenshots/qtlabscalendar-dayofweekrow-layout.qml
src/imports/controls/doc/snippets/screenshots/qtlabscalendar-dayofweekrow.qml
src/imports/controls/doc/snippets/screenshots/qtlabscalendar-monthgrid-layout.qml
src/imports/controls/doc/snippets/screenshots/qtlabscalendar-monthgrid.qml
src/imports/controls/doc/snippets/screenshots/qtlabscalendar-weeknumbercolumn-layout.qml
src/imports/controls/doc/snippets/screenshots/qtlabscalendar-weeknumbercolumn.qml
src/imports/controls/qtquickcontrols2plugin.cpp
src/quicktemplates2/qquicktooltip.cpp
src/quicktemplates2/qquicktooltip_p.h
src/quicktemplates2/qquicktumbler.cpp
tests/auto/controls/data/tst_spinbox.qml
tests/auto/controls/data/tst_tumbler.qml
tests/auto/qquickmaterialstyle/data/tst_material.qml
Change-Id: I25b7473b47739043b6f768603bece30b18021318
Diffstat (limited to 'src/quicktemplates2/qquicktumbler.cpp')
-rw-r--r-- | src/quicktemplates2/qquicktumbler.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/quicktemplates2/qquicktumbler.cpp b/src/quicktemplates2/qquicktumbler.cpp index 82188df8..b7e47ec8 100644 --- a/src/quicktemplates2/qquicktumbler.cpp +++ b/src/quicktemplates2/qquicktumbler.cpp @@ -701,6 +701,7 @@ public: void itemChildRemoved(QQuickItem *, QQuickItem *) override; void _q_calculateDisplacement(); + void emitIfDisplacementChanged(qreal oldDisplacement, qreal newDisplacement); // The Tumbler that contains the delegate. Required to calculated the displacement. QPointer<QQuickTumbler> tumbler; @@ -742,20 +743,26 @@ void QQuickTumblerAttachedPrivate::_q_calculateDisplacement() displacement = 0; // Can happen if the attached properties are accessed on the wrong type of item or the tumbler was destroyed. - if (!tumbler) + if (!tumbler) { + emitIfDisplacementChanged(previousDisplacement, displacement); return; + } // Can happen if there is no ListView or PathView within the contentItem. QQuickTumblerPrivate *tumblerPrivate = QQuickTumblerPrivate::get(tumbler); - if (!tumblerPrivate->viewContentItem) + if (!tumblerPrivate->viewContentItem) { + emitIfDisplacementChanged(previousDisplacement, displacement); return; + } // The attached property gets created before our count is updated, so just cheat here // to avoid having to listen to count changes. const int count = tumblerPrivate->view->property("count").toInt(); // This can happen in tests, so it may happen in normal usage too. - if (count == 0) + if (count == 0) { + emitIfDisplacementChanged(previousDisplacement, displacement); return; + } if (tumblerPrivate->viewContentItemType == QQuickTumblerPrivate::PathViewContentItem) { const qreal offset = tumblerPrivate->view->property("offset").toReal(); @@ -777,8 +784,13 @@ void QQuickTumblerAttachedPrivate::_q_calculateDisplacement() displacement = reverseDisplacement - index; } + emitIfDisplacementChanged(previousDisplacement, displacement); +} + +void QQuickTumblerAttachedPrivate::emitIfDisplacementChanged(qreal oldDisplacement, qreal newDisplacement) +{ Q_Q(QQuickTumblerAttached); - if (displacement != previousDisplacement) + if (newDisplacement != oldDisplacement) emit q->displacementChanged(); } @@ -817,6 +829,16 @@ QQuickTumblerAttached::QQuickTumblerAttached(QObject *parent) : QQuickTumblerAttached::~QQuickTumblerAttached() { + Q_D(QQuickTumblerAttached); + if (!d->tumbler) + return; + + QQuickTumblerPrivate *tumblerPrivate = QQuickTumblerPrivate::get(d->tumbler); + if (!tumblerPrivate->viewContentItem) + return; + + QQuickItemPrivate *viewContentItemPrivate = QQuickItemPrivate::get(tumblerPrivate->viewContentItem); + viewContentItemPrivate->removeItemChangeListener(d, QQuickItemPrivate::Geometry | QQuickItemPrivate::Children); } /*! |