From 9edc8a3834c9ba067b255b9996d59a473df6ef18 Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Wed, 1 Dec 2010 18:09:09 -0200 Subject: Fixed qt_metacall, now everything works as it should. Reviewer: Luciano Wolf Lauro Moura --- libpyside/pysidemetafunction.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'libpyside/pysidemetafunction.cpp') diff --git a/libpyside/pysidemetafunction.cpp b/libpyside/pysidemetafunction.cpp index bcccbb82a..bee793cc6 100644 --- a/libpyside/pysidemetafunction.cpp +++ b/libpyside/pysidemetafunction.cpp @@ -98,29 +98,26 @@ void functionFree(void *self) PyObject* functionCall(PyObject* self, PyObject* args, PyObject* kw) { + static Shiboken::TypeResolver* typeResolver = Shiboken::TypeResolver::get("QVariant"); + Q_ASSERT(typeResolver); + QGenericArgument gArgs[10]; + QVariant vArgs[10]; PySideMetaFunction* function = reinterpret_cast(self); - QList vArgs; QMetaMethod method = function->d->method; - QList pTypes = method.parameterTypes(); - int numArgs = pTypes.size(); + int argsGiven = method.parameterTypes().size(); - Shiboken::TypeResolver* typeResolver = Shiboken::TypeResolver::get("QVariant"); - Q_ASSERT(typeResolver); - for(int i=0; i < numArgs; i++) { - QVariant *vArg; + for (int i = 0; i < argsGiven; ++i) { Shiboken::AutoDecRef pyArg(PySequence_GetItem(args, i)); - typeResolver->toCpp(pyArg, (void**)&vArg, true); - vArgs.append(vArg); - gArgs[i] = Q_ARG(QVariant, *vArg); + gArgs[i] = Q_ARG(QVariant, vArgs[i]); + void* v[1] = { &vArgs[i] }; + typeResolver->toCpp(pyArg, v); } QVariant retVariant; QGenericReturnArgument returnValue = Q_RETURN_ARG(QVariant, retVariant); method.invoke(function->d->qobject, returnValue, gArgs[0], gArgs[1], gArgs[2], gArgs[3], gArgs[4], gArgs[5], gArgs[6], gArgs[7], gArgs[8], gArgs[9]); - while(!vArgs.isEmpty()) - delete vArgs.takeFirst(); if (retVariant.isValid()) return typeResolver->toPython(&retVariant); -- cgit v1.2.3