src/script/api/qscriptvalue.cpp
branchRCL_3
changeset 4 3b1da2848fc7
parent 3 41300fa6a67c
child 5 d3bac044e0f0
--- a/src/script/api/qscriptvalue.cpp	Tue Feb 02 00:43:10 2010 +0200
+++ b/src/script/api/qscriptvalue.cpp	Fri Feb 19 23:40:16 2010 +0200
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
@@ -54,6 +54,7 @@
 #include "bridge/qscriptvariant_p.h"
 #include "bridge/qscriptqobject_p.h"
 #include "bridge/qscriptdeclarativeclass_p.h"
+#include "bridge/qscriptdeclarativeobject_p.h"
 
 /*!
   \since 4.3
@@ -1570,9 +1571,10 @@
     Q_D(const QScriptValue);
     if (isQObject()) {
         QScriptObject *object = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
-        return static_cast<QScript::QObjectDelegate*>(object->delegate())->value();
-    } else if (QScriptDeclarativeClass *dc = QScriptDeclarativeClass::scriptClass(*this)) {
-        return dc->toQObject(QScriptDeclarativeClass::object(*this));
+        QScriptObjectDelegate *delegate = object->delegate();
+        if (delegate->type() == QScriptObjectDelegate::DeclarativeClassObject)
+            return static_cast<QScript::DeclarativeObjectDelegate*>(delegate)->scriptClass()->toQObject(QScriptDeclarativeClass::object(*this));
+        return static_cast<QScript::QObjectDelegate*>(delegate)->value();
     } else if (isVariant()) {
         QVariant var = toVariant();
         int type = var.userType();
@@ -2245,7 +2247,9 @@
         return false;
     QScriptObject *object = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
     QScriptObjectDelegate *delegate = object->delegate();
-    return (delegate && (delegate->type() == QScriptObjectDelegate::QtObject));
+    return (delegate && (delegate->type() == QScriptObjectDelegate::QtObject ||
+                         (delegate->type() == QScriptObjectDelegate::DeclarativeClassObject &&
+                          static_cast<QScript::DeclarativeObjectDelegate*>(delegate)->scriptClass()->isQObject())));
 }
 
 /*!