From 28ce318fcbccb5a117ca4e55322ee1c1dd8d05d4 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Fri, 17 May 2019 20:04:40 +0200 Subject: Cleanup the fallout of QWeakPointer::data() deprecation There are still users of QWeakPointer::data(), which under certain compilers will make headersclean fail. So this patch: * ports data() to a private internalData() function and calls it from all the usage points; * adds cleanup notes for Qt 6, once some of the deprecated machinery around storing unmanaged QObjects in QWeakPointers can get removed. Change-Id: Id3bcbd23374c18a2026861c08a4dcba1670673c1 Reviewed-by: Marc Mutz Reviewed-by: Mike Krus --- src/corelib/kernel/qpointer.h | 4 ++-- src/corelib/tools/qsharedpointer_impl.h | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/kernel/qpointer.h b/src/corelib/kernel/qpointer.h index 3e92289792..80faef2990 100644 --- a/src/corelib/kernel/qpointer.h +++ b/src/corelib/kernel/qpointer.h @@ -83,7 +83,7 @@ public: { wp.assign(static_cast(p)); return *this; } inline T* data() const - { return static_cast(wp.d == nullptr || wp.d->strongref.load() == 0 ? nullptr : wp.value); } + { return static_cast(wp.internalData()); } inline T* operator->() const { return data(); } inline T& operator*() const @@ -143,7 +143,7 @@ template QPointer qPointerFromVariant(const QVariant &variant) { - return QPointer(qobject_cast(QtSharedPointer::weakPointerFromVariant_internal(variant).data())); + return QPointer(qobject_cast(QtSharedPointer::weakPointerFromVariant_internal(variant).internalData())); } template diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index d16a7c6659..f0aca7c14e 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -568,7 +568,7 @@ public: #if QT_DEPRECATED_SINCE(5, 14) QT_DEPRECATED_X("Use toStrongRef() instead, and data() on the returned QSharedPointer") - T *data() const noexcept { return d == nullptr || d->strongref.load() == 0 ? nullptr : value; } + T *data() const noexcept { return internalData(); } #endif inline QWeakPointer() noexcept : d(nullptr), value(nullptr) { } @@ -678,6 +678,12 @@ public: #else template friend class QSharedPointer; template friend class QPointer; + template + friend QWeakPointer::Value, X>::type> + qWeakPointerFromVariant(const QVariant &variant); + template + friend QPointer + qPointerFromVariant(const QVariant &variant); #endif template @@ -701,6 +707,13 @@ public: value = actual; } + // ### Qt 6: remove users of this API; no one should ever access + // a weak pointer's data but the weak pointer itself + inline T *internalData() const noexcept + { + return d == nullptr || d->strongref.load() == 0 ? nullptr : value; + } + Data *d; T *value; }; @@ -974,11 +987,13 @@ qobject_cast(const QWeakPointer &src) return qSharedPointerObjectCast::Type, T>(src); } +/// ### Qt 6: make this use toStrongRef() (once support for storing +/// non-managed QObjects in QWeakPointer is removed) template QWeakPointer::Value, T>::type> qWeakPointerFromVariant(const QVariant &variant) { - return QWeakPointer(qobject_cast(QtSharedPointer::weakPointerFromVariant_internal(variant).data())); + return QWeakPointer(qobject_cast(QtSharedPointer::weakPointerFromVariant_internal(variant).internalData())); } template QSharedPointer::Value, T>::type> -- cgit v1.2.3