diff options
author | Liang Qi <liang.qi@qt.io> | 2017-03-02 09:05:12 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-03-02 09:05:12 +0100 |
commit | 78dd18a0cd18449e1289e428ea6eca65e28fb114 (patch) | |
tree | bbb442c218d1504adb70d49ae67ac78a9c2c42bd /src/qml/qml/qqmltypewrapper.cpp | |
parent | 015dff255ff0f40c553b1dee43c6cff013df64eb (diff) | |
parent | 8c864e52369ee4d55a1d9345215c8153144b5939 (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Change-Id: I6cbd83b61fac34c2ba6936711289ec09a490719a
Diffstat (limited to 'src/qml/qml/qqmltypewrapper.cpp')
-rw-r--r-- | src/qml/qml/qqmltypewrapper.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/qml/qml/qqmltypewrapper.cpp b/src/qml/qml/qqmltypewrapper.cpp index c4422afa9c..49103ed653 100644 --- a/src/qml/qml/qqmltypewrapper.cpp +++ b/src/qml/qml/qqmltypewrapper.cpp @@ -129,15 +129,20 @@ ReturnedValue QmlTypeWrapper::create(QV4::ExecutionEngine *engine, QObject *o, Q return w.asReturnedValue(); } -static int enumForSingleton(String *name, QObject *qobjectSingleton) +static int enumForSingleton(QV4::ExecutionEngine *v4, String *name, QObject *qobjectSingleton, + QQmlType *type) { + bool ok; + int value = type->enumValue(QQmlEnginePrivate::get(v4->qmlEngine()), name, &ok); + if (ok) + return value; + // ### Optimize QByteArray enumName = name->toQString().toUtf8(); const QMetaObject *metaObject = qobjectSingleton->metaObject(); for (int ii = metaObject->enumeratorCount() - 1; ii >= 0; --ii) { QMetaEnum e = metaObject->enumerator(ii); - bool ok; - int value = e.keyToValue(enumName.constData(), &ok); + value = e.keyToValue(enumName.constData(), &ok); if (ok) return value; } @@ -183,7 +188,7 @@ ReturnedValue QmlTypeWrapper::get(const Managed *m, String *name, bool *hasPrope // check for enum value const bool includeEnums = w->d()->mode == Heap::QmlTypeWrapper::IncludeEnums; if (includeEnums && name->startsWithUpper()) { - const int value = enumForSingleton(name, qobjectSingleton); + const int value = enumForSingleton(v4, name, qobjectSingleton, type); if (value != -1) return QV4::Primitive::fromInt32(value).asReturnedValue(); } @@ -196,7 +201,7 @@ ReturnedValue QmlTypeWrapper::get(const Managed *m, String *name, bool *hasPrope // Warn when attempting to access a lowercased enum value, singleton case if (!ok && includeEnums && !name->startsWithUpper()) { - const int value = enumForSingleton(name, qobjectSingleton); + const int value = enumForSingleton(v4, name, qobjectSingleton, type); if (value != -1) return throwLowercaseEnumError(v4, name, type); } |