diff options
author | Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com> | 2014-12-02 13:43:25 +0100 |
---|---|---|
committer | Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com> | 2014-12-07 12:38:32 +0100 |
commit | c0a6a1db85e79931f4ac5782a6806d446995e3f0 (patch) | |
tree | dbc2528728c8f237a354f1cf2eeac36742c6430e /src/corelib/kernel/qmetaobject.cpp | |
parent | 5f09f2bb3383bc51e3c965f555fac0c73dbe6dd8 (diff) |
Re-factor code that do lazy property registration into a function.
The code was repeated in a different form 3 times.
Change-Id: I6d0deb5dd9a317e1aab6a97d5eb2fd647f597661
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/kernel/qmetaobject.cpp')
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index 1b7ced8dc8..bf31ef9151 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -2820,9 +2820,8 @@ int QMetaProperty::userType() const if (isEnumType()) { type = QMetaType::type(qualifiedName(menum)); if (type == QMetaType::UnknownType) { - void *argv[] = { &type }; - mobj->static_metacall(QMetaObject::RegisterPropertyMetaType, idx, argv); - if (type == -1 || type == QMetaType::UnknownType) + type = registerPropertyType(); + if (type == QMetaType::UnknownType) return QVariant::Int; // Match behavior of QMetaType::type() } return type; @@ -2830,11 +2829,7 @@ int QMetaProperty::userType() const type = QMetaType::type(typeName()); if (type != QMetaType::UnknownType) return type; - void *argv[] = { &type }; - mobj->static_metacall(QMetaObject::RegisterPropertyMetaType, idx, argv); - if (type != -1) - return type; - return QMetaType::UnknownType; + return registerPropertyType(); } /*! @@ -2898,6 +2893,20 @@ bool QMetaProperty::hasStdCppSet() const } /*! + \internal + Executes metacall with QMetaObject::RegisterPropertyMetaType flag. + Returns id of registered type or QMetaType::UnknownType if a type + could not be registered for any reason. +*/ +int QMetaProperty::registerPropertyType() const +{ + int registerResult = -1; + void *argv[] = { ®isterResult }; + mobj->static_metacall(QMetaObject::RegisterPropertyMetaType, idx, argv); + return registerResult == -1 ? QMetaType::UnknownType : registerResult; +} + +/*! Returns the enumerator if this property's type is an enumerator type; otherwise the returned value is undefined. @@ -2942,20 +2951,11 @@ QVariant QMetaProperty::read(const QObject *object) const } if (t == QMetaType::UnknownType) { // Try to register the type and try again before reporting an error. - int registerResult = -1; - void *argv[] = { ®isterResult }; - if ((priv(mobj->d.data)->flags & PropertyAccessInStaticMetaCall) && mobj->d.static_metacall) { - mobj->d.static_metacall(const_cast<QObject*>(object), QMetaObject::RegisterPropertyMetaType, - idx, argv); - } else { - QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::RegisterPropertyMetaType, - idx + mobj->propertyOffset(), argv); - } - if (registerResult == -1) { + t = registerPropertyType(); + if (t == QMetaType::UnknownType) { qWarning("QMetaProperty::read: Unable to handle unregistered datatype '%s' for property '%s::%s'", typeName, mobj->className(), name()); return QVariant(); } - t = registerResult; } } |