diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-01-19 23:33:48 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-01-20 09:05:16 +0000 |
commit | e10b4acd4a60182d175b06b461f7b6aef15567dd (patch) | |
tree | e1c874ecc12fc13650710dd43ef5db392217a803 /src/quicktemplates2/qquickscrollbar.cpp | |
parent | fdd41317118cd14fdab472a60ac67516d9d4d937 (diff) |
ScrollBar: fix memory leak when attached to a non-Flickable
We must pass the attachee QObject as a parent instead of passing
a qobject_casted QQuickFlickable, which may be a null pointer.
Change-Id: If3c785beac76ad989d12579e6d41062f4754ba2e
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickscrollbar.cpp')
-rw-r--r-- | src/quicktemplates2/qquickscrollbar.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp index f7a5c246ba..bcb86fa3c1 100644 --- a/src/quicktemplates2/qquickscrollbar.cpp +++ b/src/quicktemplates2/qquickscrollbar.cpp @@ -281,11 +281,7 @@ QQuickScrollBar::QQuickScrollBar(QQuickItem *parent) QQuickScrollBarAttached *QQuickScrollBar::qmlAttachedProperties(QObject *object) { - QQuickFlickable *flickable = qobject_cast<QQuickFlickable *>(object); - if (!flickable) - qmlWarning(object) << "ScrollBar must be attached to a Flickable"; - - return new QQuickScrollBarAttached(flickable); + return new QQuickScrollBarAttached(object); } /*! @@ -606,8 +602,8 @@ QAccessible::Role QQuickScrollBar::accessibleRole() const class QQuickScrollBarAttachedPrivate : public QObjectPrivate, public QQuickItemChangeListener { public: - QQuickScrollBarAttachedPrivate(QQuickFlickable *flickable) - : flickable(flickable), + QQuickScrollBarAttachedPrivate() + : flickable(nullptr), horizontal(nullptr), vertical(nullptr) { @@ -727,14 +723,15 @@ void QQuickScrollBarAttachedPrivate::itemDestroyed(QQuickItem *item) vertical = nullptr; } -QQuickScrollBarAttached::QQuickScrollBarAttached(QQuickFlickable *flickable) - : QObject(*(new QQuickScrollBarAttachedPrivate(flickable)), flickable) +QQuickScrollBarAttached::QQuickScrollBarAttached(QObject *parent) + : QObject(*(new QQuickScrollBarAttachedPrivate), parent) { Q_D(QQuickScrollBarAttached); - if (flickable) { - QQuickItemPrivate *p = QQuickItemPrivate::get(flickable); - p->updateOrAddGeometryChangeListener(d, QQuickGeometryChange::Size); - } + d->flickable = qobject_cast<QQuickFlickable *>(parent); + if (d->flickable) + QQuickItemPrivate::get(d->flickable)->updateOrAddGeometryChangeListener(d, QQuickGeometryChange::Size); + else if (parent) + qmlWarning(parent) << "ScrollBar must be attached to a Flickable"; } QQuickScrollBarAttached::~QQuickScrollBarAttached() |