mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-23 18:32:55 +00:00
bring QtDBus meta-object generator in sync with moc
upstream commits:
4ec2b37542
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
a396feff1d
commit
2388dc8e17
1 changed files with 52 additions and 95 deletions
|
@ -53,10 +53,15 @@
|
|||
#include "qdbusintrospection_p.h"
|
||||
#include "qdbusabstractinterface_p.h"
|
||||
|
||||
#include "qmetaobject_p.h"
|
||||
|
||||
#ifndef QT_NO_DBUS
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
// must be kept in sync with the moc
|
||||
static int qmetaobjectrevision = 6;
|
||||
|
||||
class QDBusMetaObjectGenerator
|
||||
{
|
||||
public:
|
||||
|
@ -89,52 +94,7 @@ private:
|
|||
QByteArray name;
|
||||
};
|
||||
|
||||
enum PropertyFlags {
|
||||
Invalid = 0x00000000,
|
||||
Readable = 0x00000001,
|
||||
Writable = 0x00000002,
|
||||
Resettable = 0x00000004,
|
||||
EnumOrFlag = 0x00000008,
|
||||
StdCppSet = 0x00000100,
|
||||
// Override = 0x00000200,
|
||||
Constant = 0x00000400,
|
||||
Final = 0x00000800,
|
||||
Designable = 0x00001000,
|
||||
ResolveDesignable = 0x00002000,
|
||||
Scriptable = 0x00004000,
|
||||
ResolveScriptable = 0x00008000,
|
||||
Stored = 0x00010000,
|
||||
ResolveStored = 0x00020000,
|
||||
Editable = 0x00040000,
|
||||
ResolveEditable = 0x00080000,
|
||||
User = 0x00100000,
|
||||
ResolveUser = 0x00200000,
|
||||
Notify = 0x00400000,
|
||||
Revisioned = 0x00800000
|
||||
};
|
||||
|
||||
enum MethodFlags {
|
||||
AccessPrivate = 0x00,
|
||||
AccessProtected = 0x01,
|
||||
AccessPublic = 0x02,
|
||||
AccessMask = 0x03, //mask
|
||||
|
||||
MethodMethod = 0x00,
|
||||
MethodSignal = 0x04,
|
||||
MethodSlot = 0x08,
|
||||
MethodConstructor = 0x0c,
|
||||
MethodTypeMask = 0x0c,
|
||||
|
||||
MethodCloned = 0x10,
|
||||
MethodScriptable = 0x20,
|
||||
MethodRevisioned = 0x40
|
||||
};
|
||||
|
||||
enum MetaObjectFlags {
|
||||
DynamicMetaObject = 0x01,
|
||||
RequiresVariantMetaObject = 0x02
|
||||
};
|
||||
|
||||
QMap<QByteArray, Method> signals_;
|
||||
QMap<QByteArray, Method> methods;
|
||||
QMap<QByteArray, Property> properties;
|
||||
|
||||
|
@ -153,19 +113,8 @@ private:
|
|||
static const int intsPerProperty = 2;
|
||||
static const int intsPerMethod = 5;
|
||||
|
||||
// ### from kernel/qmetaobject.cpp (Qt 4.1.2):
|
||||
struct QDBusMetaObjectPrivate
|
||||
struct QDBusMetaObjectPrivate : public QMetaObjectPrivate
|
||||
{
|
||||
int revision;
|
||||
int className;
|
||||
int classInfoCount, classInfoData;
|
||||
int methodCount, methodData;
|
||||
int propertyCount, propertyData;
|
||||
int enumeratorCount, enumeratorData;
|
||||
int constructorCount, constructorData; // since revision 2
|
||||
int flags; // since revision 3
|
||||
|
||||
// this is specific for QDBusMetaObject:
|
||||
int propertyDBusData;
|
||||
int methodDBusData;
|
||||
};
|
||||
|
@ -386,7 +335,7 @@ void QDBusMetaObjectGenerator::parseSignals()
|
|||
mm.flags = AccessProtected | MethodSignal | MethodScriptable;
|
||||
|
||||
// add
|
||||
methods.insert(QMetaObject::normalizedSignature(prototype), mm);
|
||||
signals_.insert(QMetaObject::normalizedSignature(prototype), mm);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -438,11 +387,11 @@ void QDBusMetaObjectGenerator::write(QDBusMetaObject *obj)
|
|||
idata.resize(sizeof(QDBusMetaObjectPrivate) / sizeof(int));
|
||||
|
||||
QDBusMetaObjectPrivate *header = reinterpret_cast<QDBusMetaObjectPrivate *>(idata.data());
|
||||
header->revision = 3;
|
||||
header->revision = qmetaobjectrevision;
|
||||
header->className = 0;
|
||||
header->classInfoCount = 0;
|
||||
header->classInfoData = 0;
|
||||
header->methodCount = methods.count();
|
||||
header->methodCount = signals_.count() + methods.count();
|
||||
header->methodData = idata.size();
|
||||
header->propertyCount = properties.count();
|
||||
header->propertyData = header->methodData + header->methodCount * 5;
|
||||
|
@ -451,12 +400,16 @@ void QDBusMetaObjectGenerator::write(QDBusMetaObject *obj)
|
|||
header->constructorCount = 0;
|
||||
header->constructorData = 0;
|
||||
header->flags = RequiresVariantMetaObject;
|
||||
header->signalCount = signals_.count();
|
||||
// These are specific to QDBusMetaObject:
|
||||
header->propertyDBusData = header->propertyData + header->propertyCount * 3;
|
||||
header->methodDBusData = header->propertyDBusData + header->propertyCount * intsPerProperty;
|
||||
|
||||
int data_size = idata.size() +
|
||||
(header->methodCount * (5+intsPerMethod)) +
|
||||
(header->propertyCount * (3+intsPerProperty));
|
||||
foreach (const Method &mm, signals_)
|
||||
data_size += 2 + mm.inputTypes.count() + mm.outputTypes.count();
|
||||
foreach (const Method &mm, methods)
|
||||
data_size += 2 + mm.inputTypes.count() + mm.outputTypes.count();
|
||||
idata.resize(data_size + 1);
|
||||
|
@ -472,44 +425,48 @@ void QDBusMetaObjectGenerator::write(QDBusMetaObject *obj)
|
|||
idata[typeidOffset++] = 0; // eod
|
||||
|
||||
// add each method:
|
||||
for (QMap<QByteArray, Method>::ConstIterator it = methods.constBegin();
|
||||
it != methods.constEnd(); ++it) {
|
||||
// form "prototype\0parameters\0typeName\0tag\0methodname\0inputSignature\0outputSignature"
|
||||
const Method &mm = it.value();
|
||||
for (int x = 0; x < 2; ++x) {
|
||||
// Signals must be added before other methods, to match moc.
|
||||
QMap<QByteArray, Method> &map = (x == 0) ? signals_ : methods;
|
||||
for (QMap<QByteArray, Method>::ConstIterator it = map.constBegin();
|
||||
it != map.constEnd(); ++it) {
|
||||
// form "prototype\0parameters\0typeName\0tag\0methodname\0inputSignature\0outputSignature"
|
||||
const Method &mm = it.value();
|
||||
|
||||
idata[offset++] = stringdata.length();
|
||||
stringdata += it.key(); // prototype
|
||||
stringdata += null;
|
||||
idata[offset++] = stringdata.length();
|
||||
stringdata += mm.parameters;
|
||||
stringdata += null;
|
||||
idata[offset++] = stringdata.length();
|
||||
stringdata += mm.typeName;
|
||||
stringdata += null;
|
||||
idata[offset++] = stringdata.length();
|
||||
stringdata += mm.tag;
|
||||
stringdata += null;
|
||||
idata[offset++] = mm.flags;
|
||||
idata[offset++] = stringdata.length();
|
||||
stringdata += it.key(); // prototype
|
||||
stringdata += null;
|
||||
idata[offset++] = stringdata.length();
|
||||
stringdata += mm.parameters;
|
||||
stringdata += null;
|
||||
idata[offset++] = stringdata.length();
|
||||
stringdata += mm.typeName;
|
||||
stringdata += null;
|
||||
idata[offset++] = stringdata.length();
|
||||
stringdata += mm.tag;
|
||||
stringdata += null;
|
||||
idata[offset++] = mm.flags;
|
||||
|
||||
idata[signatureOffset++] = stringdata.length();
|
||||
stringdata += mm.name;
|
||||
stringdata += null;
|
||||
idata[signatureOffset++] = stringdata.length();
|
||||
stringdata += mm.inputSignature;
|
||||
stringdata += null;
|
||||
idata[signatureOffset++] = stringdata.length();
|
||||
stringdata += mm.outputSignature;
|
||||
stringdata += null;
|
||||
idata[signatureOffset++] = stringdata.length();
|
||||
stringdata += mm.name;
|
||||
stringdata += null;
|
||||
idata[signatureOffset++] = stringdata.length();
|
||||
stringdata += mm.inputSignature;
|
||||
stringdata += null;
|
||||
idata[signatureOffset++] = stringdata.length();
|
||||
stringdata += mm.outputSignature;
|
||||
stringdata += null;
|
||||
|
||||
idata[signatureOffset++] = typeidOffset;
|
||||
idata[typeidOffset++] = mm.inputTypes.count();
|
||||
memcpy(idata.data() + typeidOffset, mm.inputTypes.data(), mm.inputTypes.count() * sizeof(int));
|
||||
typeidOffset += mm.inputTypes.count();
|
||||
idata[signatureOffset++] = typeidOffset;
|
||||
idata[typeidOffset++] = mm.inputTypes.count();
|
||||
memcpy(idata.data() + typeidOffset, mm.inputTypes.data(), mm.inputTypes.count() * sizeof(int));
|
||||
typeidOffset += mm.inputTypes.count();
|
||||
|
||||
idata[signatureOffset++] = typeidOffset;
|
||||
idata[typeidOffset++] = mm.outputTypes.count();
|
||||
memcpy(idata.data() + typeidOffset, mm.outputTypes.data(), mm.outputTypes.count() * sizeof(int));
|
||||
typeidOffset += mm.outputTypes.count();
|
||||
idata[signatureOffset++] = typeidOffset;
|
||||
idata[typeidOffset++] = mm.outputTypes.count();
|
||||
memcpy(idata.data() + typeidOffset, mm.outputTypes.data(), mm.outputTypes.count() * sizeof(int));
|
||||
typeidOffset += mm.outputTypes.count();
|
||||
}
|
||||
}
|
||||
|
||||
Q_ASSERT(offset == header->propertyData);
|
||||
|
|
Loading…
Add table
Reference in a new issue