aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6
diff options
context:
space:
mode:
Diffstat (limited to 'sources/pyside6')
-rw-r--r--sources/pyside6/doc/extras/QtCore.Slot.rst6
-rw-r--r--sources/pyside6/libpyside/dynamicqmetaobject.cpp10
-rw-r--r--sources/pyside6/libpyside/pysideslot.cpp14
-rw-r--r--sources/pyside6/libpyside/pysideslot_p.h1
4 files changed, 23 insertions, 8 deletions
diff --git a/sources/pyside6/doc/extras/QtCore.Slot.rst b/sources/pyside6/doc/extras/QtCore.Slot.rst
index 55c3d9fb7..c62104369 100644
--- a/sources/pyside6/doc/extras/QtCore.Slot.rst
+++ b/sources/pyside6/doc/extras/QtCore.Slot.rst
@@ -22,10 +22,11 @@ Detailed Description
QtCore pyqtSlot Slot
======= ======================= =============
- .. class:: PySide6.QtCore.Slot([type1 [, type2...]] [, name="" [, result=None]])
+ .. class:: PySide6.QtCore.Slot([type1 [, type2...]] [, name="" [, result=None, [tag=""]]])
:param name: str
:param result: type
+ :param tag: str
``Slot`` takes a list of Python types of the arguments.
@@ -34,6 +35,9 @@ Detailed Description
The optional named argument ``result`` specifies the return type.
+ The optional named argument ``tag`` specifies a value to be returned
+ by ``QMetaMethod.tag()``.
+
.. seealso:: :ref:`signals-and-slots`
Q_INVOKABLE
diff --git a/sources/pyside6/libpyside/dynamicqmetaobject.cpp b/sources/pyside6/libpyside/dynamicqmetaobject.cpp
index b7fbc7661..b41dbc275 100644
--- a/sources/pyside6/libpyside/dynamicqmetaobject.cpp
+++ b/sources/pyside6/libpyside/dynamicqmetaobject.cpp
@@ -53,7 +53,8 @@ public:
const QByteArray &signature) const;
int indexOfProperty(const QByteArray &name) const;
int addSlot(const QByteArray &signature);
- int addSlot(const QByteArray &signature, const QByteArray &type);
+ int addSlot(const QByteArray &signature, const QByteArray &type,
+ const QByteArray &tag = {});
int addSignal(const QByteArray &signature);
void removeMethod(QMetaMethod::MethodType mtype, int index);
int getPropertyNotifyId(PySideProperty *property) const;
@@ -211,7 +212,8 @@ int MetaObjectBuilder::addSlot(const char *signature)
}
int MetaObjectBuilderPrivate::addSlot(const QByteArray &signature,
- const QByteArray &type)
+ const QByteArray &type,
+ const QByteArray &tag)
{
if (!checkMethodSignature(signature))
return -1;
@@ -219,6 +221,8 @@ int MetaObjectBuilderPrivate::addSlot(const QByteArray &signature,
QMetaMethodBuilder methodBuilder = ensureBuilder()->addSlot(signature);
if (!type.isEmpty() && type != "void"_ba)
methodBuilder.setReturnType(type);
+ if (!tag.isEmpty())
+ methodBuilder.setTag(tag);
return m_baseObject->methodCount() + methodBuilder.index();
}
@@ -638,7 +642,7 @@ void MetaObjectBuilderPrivate::parsePythonType(PyTypeObject *type)
const auto *entryList = PySide::Slot::dataListFromCapsule(capsule);
for (const auto &e : *entryList) {
if (m_baseObject->indexOfSlot(e.signature) == -1)
- addSlot(e.signature, e.resultType);
+ addSlot(e.signature, e.resultType, e.tag);
}
}
}
diff --git a/sources/pyside6/libpyside/pysideslot.cpp b/sources/pyside6/libpyside/pysideslot.cpp
index 3954f5efa..676a0bb16 100644
--- a/sources/pyside6/libpyside/pysideslot.cpp
+++ b/sources/pyside6/libpyside/pysideslot.cpp
@@ -18,6 +18,7 @@ struct SlotData
QByteArray name;
QByteArray args;
QByteArray resultType;
+ QByteArray tag; // QMetaMethod::tag()
};
struct PySideSlot
@@ -63,15 +64,17 @@ static PyTypeObject *PySideSlot_TypeF()
int slotTpInit(PyObject *self, PyObject *args, PyObject *kw)
{
static PyObject *emptyTuple = nullptr;
- static const char *kwlist[] = {"name", "result", nullptr};
+ static const char *kwlist[] = {"name", "result", "tag", nullptr};
char *argName = nullptr;
PyObject *argResult = nullptr;
+ char *tag = nullptr;
if (emptyTuple == nullptr)
emptyTuple = PyTuple_New(0);
- if (!PyArg_ParseTupleAndKeywords(emptyTuple, kw, "|sO:QtCore.Slot",
- const_cast<char **>(kwlist), &argName, &argResult)) {
+ if (!PyArg_ParseTupleAndKeywords(emptyTuple, kw, "|sOs:QtCore.Slot",
+ const_cast<char **>(kwlist),
+ &argName, &argResult, &tag)) {
return -1;
}
@@ -93,6 +96,9 @@ int slotTpInit(PyObject *self, PyObject *args, PyObject *kw)
if (argName)
data->slotData->name = argName;
+ if (tag)
+ data->slotData->tag = tag;
+
data->slotData->resultType = argResult
? PySide::Signal::getTypeName(argResult) : PySide::Signal::voidType();
@@ -132,7 +138,7 @@ PyObject *slotCall(PyObject *self, PyObject *args, PyObject * /* kw */)
Py_INCREF(capsule);
PyObject_SetAttr(callback, pySlotName, capsule);
}
- entryList->append({signature, returnType});
+ entryList->append({signature, returnType, data->slotData->tag});
//clear data
delete data->slotData;
diff --git a/sources/pyside6/libpyside/pysideslot_p.h b/sources/pyside6/libpyside/pysideslot_p.h
index 8cebcd575..9852301ee 100644
--- a/sources/pyside6/libpyside/pysideslot_p.h
+++ b/sources/pyside6/libpyside/pysideslot_p.h
@@ -13,6 +13,7 @@ namespace PySide::Slot {
struct Data {
QByteArray signature;
QByteArray resultType;
+ QByteArray tag; // QMetaMethod::tag()
};
// This list is set as an attribute named PySide::PySideMagicName::slot_list_attr()