diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-04-19 17:59:53 -0300 |
---|---|---|
committer | Renato Filho <renato.filho@openbossa.org> | 2010-04-22 18:21:21 -0300 |
commit | 2c937c64420c414a33f76c8df8f1f72592469576 (patch) | |
tree | d47a008a25f78400efbb0ebf87ff03b009c85cfd /libpyside | |
parent | 3468ba1efffc17f532ca69007602e87f19245304 (diff) |
Fixed QApplication exit order.
SignalManager need be destroyed before QApplication to avoid memory
leak.
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>,
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside')
-rw-r--r-- | libpyside/globalreceiver.cpp | 8 | ||||
-rw-r--r-- | libpyside/signalmanager.cpp | 6 | ||||
-rw-r--r-- | libpyside/signalmanager.h | 3 |
3 files changed, 14 insertions, 3 deletions
diff --git a/libpyside/globalreceiver.cpp b/libpyside/globalreceiver.cpp index 9fd65b424..e37235d5e 100644 --- a/libpyside/globalreceiver.cpp +++ b/libpyside/globalreceiver.cpp @@ -247,10 +247,12 @@ int GlobalReceiver::qt_metacall(QMetaObject::Call call, int id, void** args) retval = PyObject_CallObject(callback, preparedArgs); } - if (!retval) - qWarning() << "Error calling slot" << m_metaObject.method(id).signature(); - else + if (!retval) { + qDebug() << "Error calling slot" << m_metaObject.method(id).signature(); + PyErr_Print(); + } else { Py_DECREF(retval); + } return -1; } diff --git a/libpyside/signalmanager.cpp b/libpyside/signalmanager.cpp index 9cdcca1f6..f1b39b946 100644 --- a/libpyside/signalmanager.cpp +++ b/libpyside/signalmanager.cpp @@ -221,6 +221,12 @@ SignalManager::SignalManager() : m_d(new SignalManagerPrivate) TypeResolver::createValueTypeResolver<ushort>("ushort"); } +void SignalManager::clear() +{ + delete m_d; + m_d = new SignalManagerPrivate(); +} + SignalManager::~SignalManager() { delete m_d; diff --git a/libpyside/signalmanager.h b/libpyside/signalmanager.h index 02d760ddc..233adf1ff 100644 --- a/libpyside/signalmanager.h +++ b/libpyside/signalmanager.h @@ -69,6 +69,9 @@ public: // Used to discovery if SignalManager was connected with object "destroyed()" signal. bool hasConnectionWith(const QObject *object); + + // Disconnect all signals managed by Globalreceiver + void clear(); private: struct SignalManagerPrivate; SignalManagerPrivate* m_d; |