summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qobject_p.h
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2020-12-14 12:27:53 +0100
committerIvan Solovev <ivan.solovev@qt.io>2021-04-21 15:34:28 +0200
commit1a65a4faf52f83ba3fbbba88cea1c4bb800e8de7 (patch)
tree3873a758298aba37faade1b1cd60c755815eae1c /src/corelib/kernel/qobject_p.h
parent696f5ffc64ac90e92520fd8cf9e8313fe80e3b76 (diff)
QObject: port to new property system
Extended QObjectPrivate::ExtraData to store a pointer to its parent, and reimplemented qGetBindingStorage() function for QObjectPrivate::ExtraData. This allows to use Q_OBJECT_COMPAT_PROPERTY macro for a property, stored in QObjectPrivate::ExtraData and solves all the problems with calling a custom setter. Task-number: QTBUG-85520 Change-Id: I40e01c29430846359ef9160fa1ae97c702be9a18 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Diffstat (limited to 'src/corelib/kernel/qobject_p.h')
-rw-r--r--src/corelib/kernel/qobject_p.h31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index 019473018f..673c75fff1 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -61,6 +61,7 @@
#include "QtCore/qsharedpointer.h"
#include "QtCore/qvariant.h"
#include "QtCore/qproperty.h"
+#include "QtCore/private/qproperty_p.h"
QT_BEGIN_NAMESPACE
@@ -102,12 +103,26 @@ class Q_CORE_EXPORT QObjectPrivate : public QObjectData
public:
struct ExtraData
{
- ExtraData() {}
+ ExtraData(QObjectPrivate *ptr) : parent(ptr) { }
+
+ inline void setObjectNameForwarder(const QString &name)
+ {
+ parent->q_func()->setObjectName(name);
+ }
+
+ inline void nameChangedForwarder(const QString &name)
+ {
+ emit parent->q_func()->objectNameChanged(name, QObject::QPrivateSignal());
+ }
+
QList<QByteArray> propertyNames;
QList<QVariant> propertyValues;
QList<int> runningTimers;
QList<QPointer<QObject>> eventFilters;
- QString objectName;
+ Q_OBJECT_COMPAT_PROPERTY(QObjectPrivate::ExtraData, QString, objectName,
+ &QObjectPrivate::ExtraData::setObjectNameForwarder,
+ &QObjectPrivate::ExtraData::nameChangedForwarder)
+ QObjectPrivate *parent;
};
typedef void (*StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **);
@@ -369,8 +384,9 @@ public:
cd->ref.ref();
connections.storeRelaxed(cd);
}
+
public:
- ExtraData *extraData; // extra data set by the user
+ mutable ExtraData *extraData; // extra data set by the user
// This atomic requires acquire/release semantics in a few places,
// e.g. QObject::moveToThread must synchronize with QCoreApplication::postEvent,
// because postEvent is thread-safe.
@@ -619,7 +635,14 @@ inline QBindingStorage *qGetBindingStorage(QObjectPrivate *o)
{
return &o->bindingStorage;
}
-
+inline const QBindingStorage *qGetBindingStorage(const QObjectPrivate::ExtraData *ed)
+{
+ return &ed->parent->bindingStorage;
+}
+inline QBindingStorage *qGetBindingStorage(QObjectPrivate::ExtraData *ed)
+{
+ return &ed->parent->bindingStorage;
+}
QT_END_NAMESPACE