diff options
author | renatofilho <renato.filho@openbossa.org> | 2010-09-17 17:03:01 -0300 |
---|---|---|
committer | renatofilho <renato.filho@openbossa.org> | 2010-09-17 18:54:08 -0300 |
commit | 6974551674d72a828ff9ae19af510c90a62a09ec (patch) | |
tree | 1dac32e9240ede7429569b4d25b672e8c017022a /libpyside | |
parent | b8436f6b1e1efb4da51c6bcc6c22d997541d10c6 (diff) |
Created PySide cleanup functions used to register functions to be called before the python die.
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside')
-rw-r--r-- | libpyside/pyside.cpp | 21 | ||||
-rw-r--r-- | libpyside/pyside.h | 9 | ||||
-rw-r--r-- | libpyside/signalmanager.cpp | 7 |
3 files changed, 36 insertions, 1 deletions
diff --git a/libpyside/pyside.cpp b/libpyside/pyside.cpp index ddec19803..bd4ab7c64 100644 --- a/libpyside/pyside.cpp +++ b/libpyside/pyside.cpp @@ -24,18 +24,22 @@ #include "pyside.h" #include "signalmanager.h" #include "qproperty.h" +#include "qsignal.h" #include <basewrapper.h> #include <conversions.h> #include <algorithm> -#include "qsignal.h" +#include <QStack> extern "C" void init_signal(PyObject* module); extern "C" void init_slot(PyObject* module); extern "C" void init_qproperty(PyObject* module); +static QStack<PySide::CleanupFunction> cleanupFunctionList; + namespace PySide { + void init(PyObject *module) { init_signal(module); @@ -82,5 +86,20 @@ bool fillQtProperties(PyObject* qObj, const QMetaObject* metaObj, PyObject* kwds return true; } +void registerCleanupFunction(CleanupFunction func) +{ + cleanupFunctionList.push(func); +} + +void runCleanupFunctions() +{ + while (!cleanupFunctionList.isEmpty()) { + CleanupFunction f = cleanupFunctionList.pop(); + f(); + } +} + + + } //namespace PySide diff --git a/libpyside/pyside.h b/libpyside/pyside.h index cae050b5d..2c5afb536 100644 --- a/libpyside/pyside.h +++ b/libpyside/pyside.h @@ -75,6 +75,15 @@ template<typename T> struct initQtMetaType<T, false> { }; + +typedef void (*CleanupFunction)(void); + +/** + * Register a function to be called before python die + */ +PYSIDE_API void registerCleanupFunction(CleanupFunction func); +PYSIDE_API void runCleanupFunctions(); + } //namespace PySide diff --git a/libpyside/signalmanager.cpp b/libpyside/signalmanager.cpp index 8208796b2..3724500d5 100644 --- a/libpyside/signalmanager.cpp +++ b/libpyside/signalmanager.cpp @@ -22,6 +22,7 @@ #include "signalmanager.h" #include "qproperty.h" +#include "pyside.h" #include <QHash> #include <QStringList> @@ -223,6 +224,11 @@ struct SignalManager::SignalManagerPrivate GlobalReceiver m_globalReceiver; }; +static void clearSignalManager() +{ + PySide::SignalManager::instance().clear(); +} + SignalManager::SignalManager() : m_d(new SignalManagerPrivate) { // Register Qt primitive typedefs used on signals. @@ -234,6 +240,7 @@ SignalManager::SignalManager() : m_d(new SignalManagerPrivate) TypeResolver::createValueTypeResolver<PyObjectWrapper>(PYTHON_TYPE); TypeResolver::createValueTypeResolver<PyObjectWrapper>("object"); TypeResolver::createValueTypeResolver<PyObjectWrapper>("PySide::PyObjectWrapper"); + PySide::registerCleanupFunction(clearSignalManager); } void SignalManager::clear() |