aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside/dynamicqmetaobject.cpp
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-05-17 18:40:38 -0300
committerRenato Filho <renato.filho@openbossa.org>2010-05-17 19:55:06 -0300
commit089cce5dbbcaeb32b14fc561ce0d723dbb80d6e1 (patch)
treeb1e28dbb53d2f792127e27b7ecbef02fee53c3c3 /libpyside/dynamicqmetaobject.cpp
parentf976c831fd89c09e116465538f0a3888bba543e2 (diff)
Used shared pointer on MethodData to allow copy.
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>, Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside/dynamicqmetaobject.cpp')
-rw-r--r--libpyside/dynamicqmetaobject.cpp41
1 files changed, 29 insertions, 12 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
}