diff options
author | Stephen Kelly <stephen.kelly@kdab.com> | 2012-03-06 11:13:09 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-06 15:47:50 +0100 |
commit | 5b08ade72f12039aa5543106137d0cb937f3d7fa (patch) | |
tree | f3d0f4e8a1e02f08dbcefb9f9c37443c50972dc2 /src/script/api | |
parent | 88948c73595eb2d142b163edb6d791fed8298676 (diff) | |
download | qtscript-5b08ade72f12039aa5543106137d0cb937f3d7fa.tar.gz |
Make QScriptValue QObject handling consistent.
The behaviour has been inconsistent
since ae85d7c965e7d50404c056a77c73bfe00267fa12 in qtbase
which added special handling of QObjects to QVariant.
Change-Id: Ie75faa3cc3387cff8894cdba025c93f2cc2ea491
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
Diffstat (limited to 'src/script/api')
-rw-r--r-- | src/script/api/qscriptengine_p.h | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h index a9ed245..e41c5d5 100644 --- a/src/script/api/qscriptengine_p.h +++ b/src/script/api/qscriptengine_p.h @@ -948,12 +948,22 @@ inline bool QScriptEnginePrivate::isQObject(JSC::JSValue value) return false; QScriptObject *object = static_cast<QScriptObject*>(JSC::asObject(value)); QScriptObjectDelegate *delegate = object->delegate(); - return (delegate && (delegate->type() == QScriptObjectDelegate::QtObject || - (delegate->type() == QScriptObjectDelegate::DeclarativeClassObject && - static_cast<QScript::DeclarativeObjectDelegate*>(delegate)->scriptClass()->isQObject()))); -#else - return false; + + if (delegate) { + if (delegate->type() == QScriptObjectDelegate::QtObject + || (delegate->type() == QScriptObjectDelegate::DeclarativeClassObject + && static_cast<QScript::DeclarativeObjectDelegate*>(delegate)->scriptClass()->isQObject())) + return true; + + if (delegate->type() == QScriptObjectDelegate::Variant) { + QVariant var = variantValue(value); + int type = var.userType(); + if ((QMetaType::typeFlags(type) & QMetaType::PointerToQObject)) + return true; + } + } #endif + return false; } inline bool QScriptEnginePrivate::isQMetaObject(JSC::JSValue value) @@ -1055,7 +1065,7 @@ inline QObject *QScriptEnginePrivate::toQObject(JSC::ExecState *exec, JSC::JSVal if (delegate->type() == QScriptObjectDelegate::Variant) { QVariant var = variantValue(value); int type = var.userType(); - if ((type == QMetaType::QObjectStar) || (type == QMetaType::QWidgetStar)) + if (QMetaType::typeFlags(type) & QMetaType::PointerToQObject) return *reinterpret_cast<QObject* const *>(var.constData()); } } |