From eca318a367284b45efd3e36aad2842a684811879 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomi=20Korpip=C3=A4=C3=A4?= <tomi.korpipaa@theqtcompany.com>
Date: Wed, 20 May 2015 08:29:38 +0300
Subject: [PATCH] Fixed getAttachedShaders return types
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Note: Does not fix all the null problems in the bug.

Change-Id: I491f179451f89a95f5bc6bd8572284d3b764d4b9
Task-number: QTBUG-45898
Reviewed-by: Pasi Keränen <pasi.keranen@digia.com>
---
 src/imports/qtcanvas3d/context3d.cpp | 14 +++++++++-----
 src/imports/qtcanvas3d/context3d_p.h |  2 +-
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/imports/qtcanvas3d/context3d.cpp b/src/imports/qtcanvas3d/context3d.cpp
index 95c0284..abb2b8c 100644
--- a/src/imports/qtcanvas3d/context3d.cpp
+++ b/src/imports/qtcanvas3d/context3d.cpp
@@ -2049,25 +2049,29 @@ void CanvasContext::attachShader(QJSValue program3D, QJSValue shader3D)
 /*!
  * \internal
  */
-QVariantList CanvasContext::getAttachedShaders(QJSValue program3D)
+QJSValue CanvasContext::getAttachedShaders(QJSValue program3D)
 {
     qCDebug(canvas3drendering).nospace() << "Context3D::" << __FUNCTION__
                                          << "(program3D:" << program3D.toString()
                                          << ")";
 
-    QVariantList shaderList;
+    int index = 0;
 
     CanvasProgram *program = getAsProgram3D(program3D);
 
-    if (!program || !checkParent(program, __FUNCTION__))
-        return shaderList;
+    if (!program || !checkParent(program, __FUNCTION__)) {
+        m_error |= CANVAS_INVALID_VALUE;
+        return QJSValue(QJSValue::NullValue);
+    }
 
     QList<CanvasShader *> shaders = program->attachedShaders();
 
+    QJSValue shaderList = m_engine->newArray(shaders.count());
+
     for (QList<CanvasShader *>::const_iterator iter = shaders.constBegin();
          iter != shaders.constEnd(); iter++) {
         CanvasShader *shader = *iter;
-        shaderList << QVariant::fromValue(shader);
+        shaderList.setProperty(index++, m_engine->newQObject((CanvasShader *)shader));
     }
 
     return shaderList;
diff --git a/src/imports/qtcanvas3d/context3d_p.h b/src/imports/qtcanvas3d/context3d_p.h
index a45c944..60ffcfe 100644
--- a/src/imports/qtcanvas3d/context3d_p.h
+++ b/src/imports/qtcanvas3d/context3d_p.h
@@ -1160,7 +1160,7 @@ public:
 
     Q_INVOKABLE CanvasActiveInfo *getActiveAttrib(QJSValue program, uint index);
     Q_INVOKABLE CanvasActiveInfo *getActiveUniform(QJSValue program, uint index);
-    Q_INVOKABLE QVariantList getAttachedShaders(QJSValue program);
+    Q_INVOKABLE QJSValue getAttachedShaders(QJSValue program);
 
     Q_INVOKABLE void stencilFunc(glEnums func, int ref, uint mask);
     Q_INVOKABLE void stencilFuncSeparate(glEnums face, glEnums func, int ref, uint mask);
-- 
GitLab