diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-07-15 16:49:53 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-07-18 20:02:29 +0000 |
commit | 65b323fdba1d6567c73229997f6ce0784dfc8427 (patch) | |
tree | 6994bdc77bac9c0ba01c6cbc72e3cbe832265bbe /src/quicktemplates2/qquickswipeview.cpp | |
parent | 670f58cc9885af03dfdc5d775ce2169e394d0083 (diff) |
SwipeView: don't crash if attached to a non-Item
Change-Id: I381d84c45cf6cd9b1209fd0d5c7441a9f7707664
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickswipeview.cpp')
-rw-r--r-- | src/quicktemplates2/qquickswipeview.cpp | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/src/quicktemplates2/qquickswipeview.cpp b/src/quicktemplates2/qquickswipeview.cpp index 06c9b5eb..a3f52edd 100644 --- a/src/quicktemplates2/qquickswipeview.cpp +++ b/src/quicktemplates2/qquickswipeview.cpp @@ -174,13 +174,7 @@ void QQuickSwipeView::setInteractive(bool interactive) QQuickSwipeViewAttached *QQuickSwipeView::qmlAttachedProperties(QObject *object) { - QQuickItem *item = qobject_cast<QQuickItem *>(object); - if (!item) { - qWarning() << "SwipeView: attached properties must be accessed from within a child item"; - return nullptr; - } - - return new QQuickSwipeViewAttached(item); + return new QQuickSwipeViewAttached(object); } void QQuickSwipeView::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) @@ -249,8 +243,8 @@ class QQuickSwipeViewAttachedPrivate : public QObjectPrivate, public QQuickItemC { Q_DECLARE_PUBLIC(QQuickSwipeViewAttached) public: - QQuickSwipeViewAttachedPrivate(QQuickItem *item) : - item(item), + QQuickSwipeViewAttachedPrivate() : + item(nullptr), swipeView(nullptr), index(-1), currentIndex(-1) @@ -394,15 +388,20 @@ void QQuickSwipeViewAttachedPrivate::itemDestroyed(QQuickItem *item) QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Parent | QQuickItemPrivate::Destroyed); } -QQuickSwipeViewAttached::QQuickSwipeViewAttached(QQuickItem *item) : - QObject(*(new QQuickSwipeViewAttachedPrivate(item)), item) +QQuickSwipeViewAttached::QQuickSwipeViewAttached(QObject *parent) : + QObject(*(new QQuickSwipeViewAttachedPrivate), parent) { Q_D(QQuickSwipeViewAttached); - if (item->parentItem()) - d->updateView(item->parentItem()); - - QQuickItemPrivate *p = QQuickItemPrivate::get(item); - p->addItemChangeListener(d, QQuickItemPrivate::Parent | QQuickItemPrivate::Destroyed); + d->item = qobject_cast<QQuickItem *>(parent); + if (d->item) { + if (d->item->parentItem()) + d->updateView(d->item->parentItem()); + + QQuickItemPrivate *p = QQuickItemPrivate::get(d->item); + p->addItemChangeListener(d, QQuickItemPrivate::Parent | QQuickItemPrivate::Destroyed); + } else if (parent) { + qmlInfo(parent) << "SwipeView: attached properties must be accessed from within a child item"; + } } QQuickSwipeViewAttached::~QQuickSwipeViewAttached() |