aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquicktumbler.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-10-03 11:20:14 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-10-03 13:31:32 +0000
commitb13bafec9ca34aa12b4ba9fbc6bf0165957f9b37 (patch)
tree8a16936c25ee40baea19146da2ec9e04b6cdeda2 /src/quicktemplates2/qquicktumbler.cpp
parent8aaa72c1035940eb290de9ba16513b2dafe5248c (diff)
parentb6cfb4a1e30598a6176f9bbfdbd1495b37c7f59a (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.cpp30
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);
}
/*!