diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-05-17 16:50:25 -0300 |
---|---|---|
committer | Renato Filho <renato.filho@openbossa.org> | 2010-05-17 19:54:49 -0300 |
commit | 367536b2aad4c076141d6075b766c246a102d763 (patch) | |
tree | 0c9cdbda35ce258fdd5860a29e2c6517ac13f9fc /libpyside/qsignal.cpp | |
parent | 77d9398bde09ed06ff0be94168c7c8739ec2483d (diff) |
Removed init[slot,signal] from public api.
Use PyObject_dir to discovery signals methods. (this is very slow)
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>,
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside/qsignal.cpp')
-rw-r--r-- | libpyside/qsignal.cpp | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/libpyside/qsignal.cpp b/libpyside/qsignal.cpp index 2aa07d5c2..508d9e557 100644 --- a/libpyside/qsignal.cpp +++ b/libpyside/qsignal.cpp @@ -152,7 +152,7 @@ PyTypeObject SignalInstance_Type = { }; -PyAPI_FUNC(void) init_signal(PyObject* module) +void init_signal(PyObject* module) { if (PyType_Ready(&Signal_Type) < 0) return; @@ -192,17 +192,16 @@ PyObject* signal_instance_get_item(PyObject* self, PyObject* key) void signal_update_source(PyObject* source) { - PyObject* key; - PyObject* value; - Py_ssize_t pos = 0; - PyTypeObject* obType = source->ob_type; - - while (PyDict_Next(obType->tp_dict, &pos, &key, &value)) { - if (value->ob_type == &Signal_Type) { + PyObject* attrs = PyObject_Dir(source); + for(int i = 0, i_max = PyList_Size(attrs); i < i_max; i++) { + PyObject *attrName = PyList_GET_ITEM(attrs, i); + PyObject *attr = PyObject_GetAttr(source, attrName); + if (attr->ob_type == &Signal_Type) { Shiboken::AutoDecRef signalInstance(reinterpret_cast<PyObject*>(PyObject_New(SignalInstanceData, &SignalInstance_Type))); - signal_instance_initialize(signalInstance, key, reinterpret_cast<SignalData*>(value), source, 0); - PyObject_SetAttr(source, key, signalInstance); + signal_instance_initialize(signalInstance, attrName, reinterpret_cast<SignalData*>(attr), source, 0); + PyObject_SetAttr(source, attrName, signalInstance); } + Py_DECREF(attr); } } @@ -307,7 +306,7 @@ void signal_free(void *self) free(data->signatures); free(data->signalName); - data->initialized = false; + data->initialized = 0; data->signaturesSize = 0; pySelf->ob_type->tp_base->tp_free(self); @@ -330,9 +329,6 @@ void signal_instance_free(void* self) void signal_instance_initialize(PyObject* instance, PyObject* name, SignalData* data, PyObject* source, int index) { - if (data->initialized) - return; - SignalInstanceData *self = reinterpret_cast<SignalInstanceData*>(instance); if (data->signalName) self->signalName = strdup(data->signalName); @@ -347,9 +343,6 @@ void signal_instance_initialize(PyObject* instance, PyObject* name, SignalData* self->next = reinterpret_cast<PyObject*>(PyObject_New(SignalInstanceData, &SignalInstance_Type)); signal_instance_initialize(self->next, name, data, source, index); } - - if (index == 0) - data->initialized = true; } PyObject* signal_instance_connect(PyObject* self, PyObject* args, PyObject* kwds) |