aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sources/pyside6/libpyside/pysideproperty.cpp12
-rw-r--r--sources/pyside6/libpyside/pysideproperty_p.h9
2 files changed, 18 insertions, 3 deletions
diff --git a/sources/pyside6/libpyside/pysideproperty.cpp b/sources/pyside6/libpyside/pysideproperty.cpp
index 6525af32c..b7fd55d24 100644
--- a/sources/pyside6/libpyside/pysideproperty.cpp
+++ b/sources/pyside6/libpyside/pysideproperty.cpp
@@ -237,6 +237,8 @@ static int qpropertyTpInit(PyObject *self, PyObject *args, PyObject *kwds)
else
pData->doc.clear();
+ pData->pyTypeObject = type;
+ Py_XINCREF(pData->pyTypeObject);
pData->typeName = PySide::Signal::getTypeName(type);
if (pData->typeName.isEmpty())
@@ -310,9 +312,8 @@ _property_copy(PyObject *old, PyObject *get, PyObject *set, PyObject *reset, PyO
auto notify = pData->notify ? pData->notify : Py_None;
- PyObject *typeName = String::fromCString(pData->typeName);
PyObject *obNew = PyObject_CallFunction(type, const_cast<char *>("OOOOOsO" "bbb" "bbb"),
- typeName, get, set, reset, del, doc.data(), notify,
+ pData->pyTypeObject, get, set, reset, del, doc.data(), notify,
pData->designable, pData->scriptable, pData->stored,
pData->user, pData->constant, pData->final);
@@ -447,7 +448,7 @@ static int qpropertyClear(PyObject *self)
Py_CLEAR(data->freset);
Py_CLEAR(data->fdel);
Py_CLEAR(data->notify);
-
+ Py_XDECREF(data->pyTypeObject);
delete data;
reinterpret_cast<PySideProperty *>(self)->d = nullptr;
@@ -607,5 +608,10 @@ void setTypeName(PySideProperty *self, const char *typeName)
self->d->typeName = typeName;
}
+PyObject *getTypeObject(const PySideProperty *self)
+{
+ return self->d->pyTypeObject;
+}
+
} //namespace Property
} //namespace PySide
diff --git a/sources/pyside6/libpyside/pysideproperty_p.h b/sources/pyside6/libpyside/pysideproperty_p.h
index 4b6498158..456bf8f6b 100644
--- a/sources/pyside6/libpyside/pysideproperty_p.h
+++ b/sources/pyside6/libpyside/pysideproperty_p.h
@@ -60,6 +60,9 @@ public:
int reset(PyObject *source);
QByteArray typeName;
+ // Type object: A real PyTypeObject ("@Property(int)") or a string
+ // "@Property('QVariant')".
+ PyObject *pyTypeObject = nullptr;
PyObject *fget = nullptr;
PyObject *fset = nullptr;
PyObject *freset = nullptr;
@@ -184,6 +187,12 @@ bool isConstant(const PySideProperty* self);
**/
bool isFinal(const PySideProperty* self);
+/// This function returns the type object of the property. It is either a real
+/// PyTypeObject ("@Property(int)") or a string "@Property('QVariant')".
+/// @param self The property object
+/// @return type object
+PyObject *getTypeObject(const PySideProperty* self);
+
} // namespace Property
} // namespace PySide