summaryrefslogtreecommitdiff
path: root/src/script/api
diff options
context:
space:
mode:
authorStephen Kelly <stephen.kelly@kdab.com>2012-03-06 11:13:09 +0100
committerQt by Nokia <qt-info@nokia.com>2012-03-06 15:47:50 +0100
commit5b08ade72f12039aa5543106137d0cb937f3d7fa (patch)
treef3d0f4e8a1e02f08dbcefb9f9c37443c50972dc2 /src/script/api
parent88948c73595eb2d142b163edb6d791fed8298676 (diff)
downloadqtscript-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.h22
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());
}
}