aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside
diff options
context:
space:
mode:
Diffstat (limited to 'sources/pyside6/libpyside')
-rw-r--r--sources/pyside6/libpyside/dynamicqmetaobject.cpp6
-rw-r--r--sources/pyside6/libpyside/dynamicqmetaobject.h6
-rw-r--r--sources/pyside6/libpyside/qobjectconnect.cpp5
-rw-r--r--sources/pyside6/libpyside/signalmanager.cpp94
-rw-r--r--sources/pyside6/libpyside/signalmanager.h8
5 files changed, 74 insertions, 45 deletions
diff --git a/sources/pyside6/libpyside/dynamicqmetaobject.cpp b/sources/pyside6/libpyside/dynamicqmetaobject.cpp
index 1a15e60df..94ce20226 100644
--- a/sources/pyside6/libpyside/dynamicqmetaobject.cpp
+++ b/sources/pyside6/libpyside/dynamicqmetaobject.cpp
@@ -207,7 +207,7 @@ int MetaObjectBuilderPrivate::addSlot(const QByteArray &signature)
+ ensureBuilder()->addSlot(signature).index();
}
-int MetaObjectBuilder::addSlot(const char *signature)
+int MetaObjectBuilder::addSlot(const QByteArray &signature)
{
return m_d->addSlot(signature);
}
@@ -227,7 +227,7 @@ int MetaObjectBuilderPrivate::addSlot(const QByteArray &signature,
return m_baseObject->methodCount() + methodBuilder.index();
}
-int MetaObjectBuilder::addSlot(const char *signature, const char *type)
+int MetaObjectBuilder::addSlot(const QByteArray &signature, const QByteArray &type)
{
return m_d->addSlot(signature, type);
}
@@ -241,7 +241,7 @@ int MetaObjectBuilderPrivate::addSignal(const QByteArray &signature)
+ ensureBuilder()->addSignal(signature).index();
}
-int MetaObjectBuilder::addSignal(const char *signature)
+int MetaObjectBuilder::addSignal(const QByteArray &signature)
{
return m_d->addSignal(signature);
}
diff --git a/sources/pyside6/libpyside/dynamicqmetaobject.h b/sources/pyside6/libpyside/dynamicqmetaobject.h
index dd33f65f7..4ea5351c4 100644
--- a/sources/pyside6/libpyside/dynamicqmetaobject.h
+++ b/sources/pyside6/libpyside/dynamicqmetaobject.h
@@ -31,9 +31,9 @@ public:
int indexOfMethod(QMetaMethod::MethodType mtype, const QByteArray &signature) const;
int indexOfProperty(const QByteArray &name) const;
- int addSlot(const char *signature);
- int addSlot(const char *signature, const char *type);
- int addSignal(const char *signature);
+ int addSlot(const QByteArray &signature);
+ int addSlot(const QByteArray &signature, const QByteArray &type);
+ int addSignal(const QByteArray &signature);
void removeMethod(QMetaMethod::MethodType mtype, int index);
int addProperty(const char *property, PyObject *data);
void addInfo(const char *key, const char *value);
diff --git a/sources/pyside6/libpyside/qobjectconnect.cpp b/sources/pyside6/libpyside/qobjectconnect.cpp
index f3c420768..053ccc7ad 100644
--- a/sources/pyside6/libpyside/qobjectconnect.cpp
+++ b/sources/pyside6/libpyside/qobjectconnect.cpp
@@ -233,8 +233,9 @@ QMetaObject::Connection qobjectConnectCallback(QObject *source, const char *sign
const char *slotSignature = receiver.callbackSig.constData();
slotIndex = receiver.usingGlobalReceiver
? signalManager.globalReceiverSlotIndex(receiver.receiver, slotSignature)
- : PySide::SignalManager::registerMetaMethodGetIndex(receiver.receiver, slotSignature,
- QMetaMethod::Slot);
+ : PySide::SignalManager::registerMetaMethodGetIndexBA(receiver.receiver,
+ receiver.callbackSig,
+ QMetaMethod::Slot);
if (slotIndex == -1) {
if (receiver.usingGlobalReceiver)
diff --git a/sources/pyside6/libpyside/signalmanager.cpp b/sources/pyside6/libpyside/signalmanager.cpp
index 23ce36cf7..9c1160483 100644
--- a/sources/pyside6/libpyside/signalmanager.cpp
+++ b/sources/pyside6/libpyside/signalmanager.cpp
@@ -823,47 +823,71 @@ QDebug operator<<(QDebug debug, const slotSignature &sig)
return debug;
}
-int SignalManager::registerMetaMethodGetIndex(QObject *source, const char *signature, QMetaMethod::MethodType type)
+static int addMetaMethod(QObject *source, const QByteArray &signature,
+ QMetaMethod::MethodType type)
{
- if (!source) {
- qWarning("SignalManager::registerMetaMethodGetIndex(\"%s\") called with source=nullptr.",
- signature);
+ const QMetaObject *metaObject = source->metaObject();
+ SbkObject *self = Shiboken::BindingManager::instance().retrieveWrapper(source);
+ if (!Shiboken::Object::hasCppWrapper(self)) {
+ qWarning().noquote().nospace() << __FUNCTION__
+ << ": Cannot add dynamic method \"" << signature << "\" (" << type
+ << ") to " << source << ": No Wrapper found.";
return -1;
}
- const QMetaObject *metaObject = source->metaObject();
- int methodIndex = metaObject->indexOfMethod(signature);
- // Create the dynamic signal is needed
- if (methodIndex == -1) {
- SbkObject *self = Shiboken::BindingManager::instance().retrieveWrapper(source);
- if (!Shiboken::Object::hasCppWrapper(self)) {
- qWarning().noquote().nospace() << __FUNCTION__
- << ": Cannot add dynamic method \"" << signature << "\" (" << type
- << ") to " << source << ": No Wrapper found.";
- return -1;
- }
- auto *pySelf = reinterpret_cast<PyObject *>(self);
- auto *dict = SbkObject_GetDict_NoRef(pySelf);
- MetaObjectBuilder *dmo = metaBuilderFromDict(dict);
-
- // Create a instance meta object
- if (!dmo) {
- dmo = new MetaObjectBuilder(Py_TYPE(pySelf), metaObject);
- PyObject *pyDmo = PyCapsule_New(dmo, nullptr, destroyMetaObject);
- PyObject_SetAttr(pySelf, metaObjectAttr, pyDmo);
- Py_DECREF(pyDmo);
- }
- if (type == QMetaMethod::Slot) {
- qCWarning(lcPySide).noquote().nospace()
- << "Warning: Registering dynamic slot \""
- << signature << "\" on \"" << source->metaObject()->className()
- << "\". Consider annotating with " << slotSignature(signature);
- }
+ auto *pySelf = reinterpret_cast<PyObject *>(self);
+ auto *dict = SbkObject_GetDict_NoRef(pySelf);
+ MetaObjectBuilder *dmo = metaBuilderFromDict(dict);
+ // Create a instance meta object
+ if (dmo == nullptr) {
+ dmo = new MetaObjectBuilder(Py_TYPE(pySelf), metaObject);
+ PyObject *pyDmo = PyCapsule_New(dmo, nullptr, destroyMetaObject);
+ PyObject_SetAttr(pySelf, metaObjectAttr, pyDmo);
+ Py_DECREF(pyDmo);
+ }
+
+ if (type == QMetaMethod::Slot) {
+ qCWarning(lcPySide).noquote().nospace()
+ << "Warning: Registering dynamic slot \""
+ << signature << "\" on \"" << source->metaObject()->className()
+ << "\". Consider annotating with " << slotSignature(signature);
+ }
+
+ return type == QMetaMethod::Signal ? dmo->addSignal(signature) : dmo->addSlot(signature);
+}
+
+static inline void warnNullSource(const char *signature)
+{
+ qWarning("SignalManager::registerMetaMethodGetIndex(\"%s\") called with source=nullptr.",
+ signature);
+}
- return type == QMetaMethod::Signal
- ? dmo->addSignal(signature) : dmo->addSlot(signature);
+int SignalManager::registerMetaMethodGetIndex(QObject *source, const char *signature,
+ QMetaMethod::MethodType type)
+{
+ if (source == nullptr) {
+ warnNullSource(signature);
+ return -1;
}
- return methodIndex;
+ const QMetaObject *metaObject = source->metaObject();
+ const int methodIndex = metaObject->indexOfMethod(signature);
+ // Create the dynamic signal if needed
+ return methodIndex != -1
+ ? methodIndex : addMetaMethod(source, QByteArray(signature), type);
+}
+
+int SignalManager::registerMetaMethodGetIndexBA(QObject* source, const QByteArray &signature,
+ QMetaMethod::MethodType type)
+{
+ if (source == nullptr) {
+ warnNullSource(signature.constData());
+ return -1;
+ }
+ const QMetaObject *metaObject = source->metaObject();
+ const int methodIndex = metaObject->indexOfMethod(signature.constData());
+ // Create the dynamic signal if needed
+ return methodIndex != -1
+ ? methodIndex : addMetaMethod(source, signature, type);
}
const QMetaObject *SignalManager::retrieveMetaObject(PyObject *self)
diff --git a/sources/pyside6/libpyside/signalmanager.h b/sources/pyside6/libpyside/signalmanager.h
index 443117447..df39e94ad 100644
--- a/sources/pyside6/libpyside/signalmanager.h
+++ b/sources/pyside6/libpyside/signalmanager.h
@@ -70,8 +70,12 @@ public:
static int qt_metacall(QObject* object, QMetaObject::Call call, int id, void** args);
// Used to register a new signal/slot on QMetaobject of source.
- static bool registerMetaMethod(QObject* source, const char* signature, QMetaMethod::MethodType type);
- static int registerMetaMethodGetIndex(QObject* source, const char* signature, QMetaMethod::MethodType type);
+ static bool registerMetaMethod(QObject* source, const char* signature,
+ QMetaMethod::MethodType type);
+ static int registerMetaMethodGetIndex(QObject* source, const char *signature,
+ QMetaMethod::MethodType type);
+ static int registerMetaMethodGetIndexBA(QObject* source, const QByteArray &signature,
+ QMetaMethod::MethodType type);
// used to discovery metaobject
static const QMetaObject* retrieveMetaObject(PyObject* self);