aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside/pysideproperty.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libpyside/pysideproperty.cpp')
-rw-r--r--libpyside/pysideproperty.cpp30
1 files changed, 26 insertions, 4 deletions
diff --git a/libpyside/pysideproperty.cpp b/libpyside/pysideproperty.cpp
index b1cb19c4e..b3f517836 100644
--- a/libpyside/pysideproperty.cpp
+++ b/libpyside/pysideproperty.cpp
@@ -169,6 +169,7 @@ int qpropertyTpInit(PyObject* self, PyObject* args, PyObject* kwds)
return 0;
}
+
pData->typeName = PySide::Signal::getTypeName(type);
if (!pData->typeName)
@@ -176,17 +177,38 @@ int qpropertyTpInit(PyObject* self, PyObject* args, PyObject* kwds)
else if (pData->constant && (pData->fset || pData->notify))
PyErr_SetString(PyExc_TypeError, "A constant property cannot have a WRITE method or a NOTIFY signal.");
- return PyErr_Occurred() ? -1 : 1;
+ if (!PyErr_Occurred()) {
+ Py_XINCREF(pData->fget);
+ Py_XINCREF(pData->fset);
+ Py_XINCREF(pData->freset);
+ Py_XINCREF(pData->fdel);
+ Py_XINCREF(pData->notify);
+ return 1;
+ } else {
+ pData->fget = 0;
+ pData->fset = 0;
+ pData->freset = 0;
+ pData->fdel = 0;
+ pData->notify = 0;
+ return -1;
+ }
}
void qpropertyFree(void *self)
{
PyObject *pySelf = reinterpret_cast<PyObject*>(self);
PySideProperty *data = reinterpret_cast<PySideProperty*>(self);
+ PySidePropertyPrivate* pData = data->d;
+
+ Py_XDECREF(pData->fget);
+ Py_XDECREF(pData->fset);
+ Py_XDECREF(pData->freset);
+ Py_XDECREF(pData->fdel);
+ Py_XDECREF(pData->notify);
- free(data->d->typeName);
- free(data->d->doc);
- free(data->d->notifySignature);
+ free(pData->typeName);
+ free(pData->doc);
+ free(pData->notifySignature);
delete data->d;
pySelf->ob_type->tp_base->tp_free(self);
}