aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libpyside/dynamicqmetaobject.cpp41
-rw-r--r--libpyside/dynamicqmetaobject.h6
2 files changed, 33 insertions, 14 deletions
diff --git a/libpyside/dynamicqmetaobject.cpp b/libpyside/dynamicqmetaobject.cpp
index facdc83e7..d4e3ca255 100644
--- a/libpyside/dynamicqmetaobject.cpp
+++ b/libpyside/dynamicqmetaobject.cpp
@@ -62,36 +62,49 @@ static int registerString(const QByteArray& s, QList<QByteArray>* strings)
}
MethodData::MethodData(const char* signature, const char* type)
- : m_signature(signature), m_type(type)
{
+ m_signature = QSharedPointer<QByteArray>(new QByteArray(signature));
+ m_type = QSharedPointer<QByteArray>(new QByteArray(type));
}
void MethodData::clear()
{
- m_signature.clear();
- m_type.clear();
+ m_signature->clear();
+ m_type->clear();
}
bool MethodData::operator==(const MethodData& other) const
{
- return m_signature == other.signature();
+ return *m_signature == other.signature();
}
bool MethodData::operator==(const char* other) const
{
- return m_signature == other;
+ return *m_signature == other;
}
QByteArray MethodData::signature() const
{
- return m_signature;
+ if (!m_signature.isNull())
+ return *m_signature;
+ else
+ return QByteArray();
}
QByteArray MethodData::type() const
{
- if (m_type == "void")
- return QByteArray("");
- return m_type;
+ if (!m_type.isNull()) {
+ if (*m_type == "void")
+ return QByteArray();
+ return *m_type;
+ } else {
+ return QByteArray();
+ }
+}
+
+bool MethodData::isValid() const
+{
+ return m_signature->size();
}
DynamicQMetaObject::DynamicQMetaObject(const char* className, const QMetaObject* metaObject)
@@ -260,7 +273,7 @@ void DynamicQMetaObject::updateMetaObject()
QLinkedList<MethodData>::iterator iSignal = m_signals.begin();
for(int i=0; i < MAX_SIGNALS_COUNT; i++) {
QByteArray sigType;
- if (iSignal != m_signals.end()) {
+ if (iSignal != m_signals.end() && ((*iSignal).signature().size() > 0) ) {
data[index++] = registerString((*iSignal).signature(), &strings); // func name
sigType = (*iSignal).type();
iSignal++;
@@ -276,9 +289,13 @@ void DynamicQMetaObject::updateMetaObject()
//write slots
foreach(MethodData slot, m_slots) {
- data[index++] = registerString(slot.signature(), &strings); // func name
+ if (slot.isValid())
+ data[index++] = registerString(slot.signature(), &strings); // func name
+ else
+ data[index++] = NULL_INDEX;
+
data[index++] = NULL_INDEX; // arguments
- data[index++] = (slot.type().size() > 0 ? registerString(slot.type(), &strings) : NULL_INDEX); // normalized type
+ data[index++] = (slot.isValid() ? registerString(slot.type(), &strings) : NULL_INDEX); // normalized type
data[index++] = NULL_INDEX; // tags
data[index++] = AccessPublic | MethodSlot; // flags
}
diff --git a/libpyside/dynamicqmetaobject.h b/libpyside/dynamicqmetaobject.h
index 36981ec42..69027f218 100644
--- a/libpyside/dynamicqmetaobject.h
+++ b/libpyside/dynamicqmetaobject.h
@@ -40,6 +40,7 @@
#include <QMetaObject>
#include <QLinkedList>
#include <QByteArray>
+#include <QSharedPointer>
#define PYSIDE_SLOT_LIST_ATTR "_slots"
@@ -54,14 +55,15 @@ public:
MethodData(){}
MethodData(const char* signature, const char* type);
void clear();
+ bool isValid() const;
QByteArray signature() const;
QByteArray type() const;
bool operator==(const MethodData& other) const;
bool operator==(const char* other) const;
private:
- QByteArray m_signature;
- QByteArray m_type;
+ QSharedPointer<QByteArray> m_signature;
+ QSharedPointer<QByteArray> m_type;
};
class PYSIDE_API DynamicQMetaObject : public QMetaObject