diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2019-05-17 20:04:40 +0200 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2019-05-17 20:42:36 +0200 |
commit | 28ce318fcbccb5a117ca4e55322ee1c1dd8d05d4 (patch) | |
tree | 139f1bb656d6358e5f0f9c25bf9447028d5e96bb | |
parent | edb53d761e62ab2e2d4832399a27d580af5a24c4 (diff) |
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 <marc.mutz@kdab.com>
Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r-- | src/corelib/kernel/qpointer.h | 4 | ||||
-rw-r--r-- | src/corelib/tools/qsharedpointer_impl.h | 19 |
2 files changed, 19 insertions, 4 deletions
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<QObjectType*>(p)); return *this; } inline T* data() const - { return static_cast<T*>(wp.d == nullptr || wp.d->strongref.load() == 0 ? nullptr : wp.value); } + { return static_cast<T*>(wp.internalData()); } inline T* operator->() const { return data(); } inline T& operator*() const @@ -143,7 +143,7 @@ template<typename T> QPointer<T> qPointerFromVariant(const QVariant &variant) { - return QPointer<T>(qobject_cast<T*>(QtSharedPointer::weakPointerFromVariant_internal(variant).data())); + return QPointer<T>(qobject_cast<T*>(QtSharedPointer::weakPointerFromVariant_internal(variant).internalData())); } template <class T> 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 <class X> friend class QSharedPointer; template <class X> friend class QPointer; + template<typename X> + friend QWeakPointer<typename std::enable_if<QtPrivate::IsPointerToTypeDerivedFromQObject<X*>::Value, X>::type> + qWeakPointerFromVariant(const QVariant &variant); + template<typename X> + friend QPointer<X> + qPointerFromVariant(const QVariant &variant); #endif template <class X> @@ -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<T> &src) return qSharedPointerObjectCast<typename QtSharedPointer::RemovePointer<X>::Type, T>(src); } +/// ### Qt 6: make this use toStrongRef() (once support for storing +/// non-managed QObjects in QWeakPointer is removed) template<typename T> QWeakPointer<typename std::enable_if<QtPrivate::IsPointerToTypeDerivedFromQObject<T*>::Value, T>::type> qWeakPointerFromVariant(const QVariant &variant) { - return QWeakPointer<T>(qobject_cast<T*>(QtSharedPointer::weakPointerFromVariant_internal(variant).data())); + return QWeakPointer<T>(qobject_cast<T*>(QtSharedPointer::weakPointerFromVariant_internal(variant).internalData())); } template<typename T> QSharedPointer<typename std::enable_if<QtPrivate::IsPointerToTypeDerivedFromQObject<T*>::Value, T>::type> |