aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-05-17 16:50:25 -0300
committerRenato Filho <renato.filho@openbossa.org>2010-05-17 19:54:49 -0300
commit367536b2aad4c076141d6075b766c246a102d763 (patch)
tree0c9cdbda35ce258fdd5860a29e2c6517ac13f9fc
parent77d9398bde09ed06ff0be94168c7c8739ec2483d (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>
-rw-r--r--libpyside/pyside.cpp4
-rw-r--r--libpyside/qsignal.cpp27
-rw-r--r--libpyside/qslot.cpp2
-rw-r--r--tests/signals/signal_object_test.py14
4 files changed, 21 insertions, 26 deletions
diff --git a/libpyside/pyside.cpp b/libpyside/pyside.cpp
index 02eea7867..3fa63a498 100644
--- a/libpyside/pyside.cpp
+++ b/libpyside/pyside.cpp
@@ -35,8 +35,8 @@
#include "pyside.h"
-extern "C" PyAPI_FUNC(void) init_signal(PyObject* module);
-extern "C" PyAPI_FUNC(void) init_slot(PyObject* module);
+extern "C" void init_signal(PyObject* module);
+extern "C" void init_slot(PyObject* module);
namespace PySide
{
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)
diff --git a/libpyside/qslot.cpp b/libpyside/qslot.cpp
index 85ab30d71..8ff04887c 100644
--- a/libpyside/qslot.cpp
+++ b/libpyside/qslot.cpp
@@ -74,7 +74,7 @@ static PyTypeObject Slot_Type = {
0, /*tp_del */
};
-PyAPI_FUNC(void) init_slot(PyObject *module)
+void init_slot(PyObject *module)
{
if (PyType_Ready(&Slot_Type) < 0)
return;
diff --git a/tests/signals/signal_object_test.py b/tests/signals/signal_object_test.py
index d4a35dced..ead4b68b9 100644
--- a/tests/signals/signal_object_test.py
+++ b/tests/signals/signal_object_test.py
@@ -5,8 +5,9 @@ import unittest
import functools
from PySide.QtCore import *
+from helper import UsesQCoreApplication
-class MyObject(QObject):
+class MyObject(QTimer):
sig1 = Signal()
sig2 = Signal(int, name='rangeChanged')
sig3 = Signal(int)
@@ -15,10 +16,8 @@ class MyObject(QObject):
@Slot(int)
def myRange(self, r):
- print "Range changed:", r
self._range = r
-
def slot1(self):
self._called = True
@@ -26,9 +25,10 @@ class MyObject(QObject):
self._s = s
-class SignalObjectTest(unittest.TestCase):
+class SignalObjectTest(UsesQCoreApplication):
def cb(self):
self._cb_called = True
+ self.app.exit()
def testsingleConnect(self):
o = MyObject()
@@ -55,8 +55,10 @@ class SignalObjectTest(unittest.TestCase):
def testGeneretedSignal(self):
o = MyObject()
- o.destroyed.connect(self.cb)
- self.assertEqual(self._cb_called)
+ o.timeout.connect(self.cb)
+ o.start(100)
+ self.app.exec_()
+ self.assert_(self._cb_called)
if __name__ == '__main__':
unittest.main()