diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-08-26 15:23:23 -0300 |
---|---|---|
committer | Renato Filho <renato.filho@openbossa.org> | 2010-08-26 16:21:41 -0300 |
commit | a2f3e249bc0543b522c7d0e516dd07326e3ea7de (patch) | |
tree | e9dc91414290d52138632821e0bcc2231cd8950b /libpyside | |
parent | 268bf7735b787d2310e18b3aed262bd27b9d24c6 (diff) |
Fixed slot singature parse function to keep compatibility with QSignal.
Fixes bug #319
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Hugo Parente Lima <hugo.pl@gmail.com>
Diffstat (limited to 'libpyside')
-rw-r--r-- | libpyside/qsignal.cpp | 11 | ||||
-rw-r--r-- | libpyside/qslot.cpp | 20 |
2 files changed, 10 insertions, 21 deletions
diff --git a/libpyside/qsignal.cpp b/libpyside/qsignal.cpp index 6c5420347..a4fda063a 100644 --- a/libpyside/qsignal.cpp +++ b/libpyside/qsignal.cpp @@ -48,6 +48,8 @@ namespace PySide extern "C" { +char* get_type_name(PyObject*); + typedef struct { PyObject_HEAD bool initialized; @@ -68,7 +70,6 @@ static PyObject* signal_instance_get_item(PyObject*, PyObject*); //aux static char* signal_build_signature(const char*, const char*); -static char* signal_get_type_name(PyObject*); static void signal_append_signature(SignalData*, char*); static void signal_instance_initialize(PyObject*, PyObject*, SignalData*, PyObject *, int); static char* signal_parse_signature(PyObject*); @@ -244,7 +245,7 @@ void signalUpdateSource(PyObject* source) } } -char* signal_get_type_name(PyObject* type) +char* get_type_name(PyObject* type) { if (PyType_Check(type)) { char *typeName = NULL; @@ -255,7 +256,7 @@ char* signal_get_type_name(PyObject* type) } else { // Translate python types to Qt names PyTypeObject *objType = reinterpret_cast<PyTypeObject*>(type); - if (objType == &PyString_Type) + if ((objType == &PyString_Type) || (objType == &PyUnicode_Type)) typeName = strdup("QString"); else if (objType == &PyInt_Type) typeName = strdup("int"); @@ -284,11 +285,11 @@ char* signal_parse_signature(PyObject *args) { char *signature = 0; if (args && (PyString_Check(args) || (!PySequence_Check(args) && (args != Py_None)))) - return signal_get_type_name(args); + return get_type_name(args); for(Py_ssize_t i = 0, i_max = PySequence_Size(args); i < i_max; i++) { Shiboken::AutoDecRef arg(PySequence_ITEM(args, i)); - char* typeName = signal_get_type_name(arg); + char* typeName = get_type_name(arg); if (typeName) { if (signature) { signature = reinterpret_cast<char*>(realloc(signature, (strlen(signature) + 1 + strlen(typeName)) * sizeof(char*))); diff --git a/libpyside/qslot.cpp b/libpyside/qslot.cpp index e74838cf4..c471cbb30 100644 --- a/libpyside/qslot.cpp +++ b/libpyside/qslot.cpp @@ -53,8 +53,8 @@ extern "C" static int slot_init(PyObject*, PyObject*, PyObject*); static PyObject* slot_call(PyObject*, PyObject*, PyObject*); -//aux -static char* slot_get_type_name(PyObject*); +//external qsignal.cpp +extern char* get_type_name(PyObject*); // Class Definition ----------------------------------------------- @@ -120,18 +120,6 @@ void init_slot(PyObject *module) } // extern "C" -char* slot_get_type_name(PyObject *type) -{ - if (PyType_Check(type)) { - //tp_name return the full name - Shiboken::AutoDecRef typeName(PyObject_GetAttrString(type, "__name__")); - return strdup(PyString_AS_STRING(typeName.object())); - } else if (PyString_Check(type)) { - return strdup(PyString_AS_STRING(type)); - } - return 0; -} - int slot_init(PyObject *self, PyObject *args, PyObject *kw) { static PyObject *emptyTuple = 0; @@ -148,7 +136,7 @@ int slot_init(PyObject *self, PyObject *args, PyObject *kw) SlotData *data = reinterpret_cast<SlotData*>(self); for(Py_ssize_t i = 0, i_max = PyTuple_Size(args); i < i_max; i++) { PyObject *argType = PyTuple_GET_ITEM(args, i); - char *typeName = slot_get_type_name(argType); + char *typeName = get_type_name(argType); if (typeName) { if (data->args) { data->args = reinterpret_cast<char*>(realloc(data->args, (strlen(data->args) + 1 + strlen(typeName)) * sizeof(char*))); @@ -165,7 +153,7 @@ int slot_init(PyObject *self, PyObject *args, PyObject *kw) data->slotName = strdup(argName); if (argResult) - data->resultType = slot_get_type_name(argResult); + data->resultType = get_type_name(argResult); else data->resultType = strdup("void"); |