9QQmlProxyMetaObject::QQmlProxyMetaObject(QObject *obj,
const QList<ProxyData> *mList)
10 : metaObjects(mList), proxies(
nullptr), parent(
nullptr), object(obj)
12 metaObject = metaObjects->constFirst().metaObject;
14 QObjectPrivate *op = QObjectPrivate::get(obj);
16 parent = op->metaObject;
18 op->metaObject =
this;
57 QQmlPropertyPrivate::connect(proxy, methodOffset + jj, object, localOffset + jj);
64int QQmlProxyMetaObject::metaCall(QObject *o, QMetaObject::Call c,
int id,
void **a)
66 Q_ASSERT(object == o);
69 case QMetaObject::ReadProperty:
70 case QMetaObject::WriteProperty: {
71 if (id < metaObjects->constLast().propertyOffset)
74 for (
int ii = 0; ii < metaObjects->size(); ++ii) {
75 const int globalPropertyOffset = metaObjects->at(ii).propertyOffset;
76 if (id < globalPropertyOffset)
79 QObject *proxy = getProxy(ii);
81 const int localProxyOffset = proxy->metaObject()->propertyOffset();
82 const int localProxyId = id - globalPropertyOffset + localProxyOffset;
83 return proxy->qt_metacall(c, localProxyId, a);
87 case QMetaObject::InvokeMetaMethod: {
88 if (id < metaObjects->constLast().methodOffset)
91 QMetaMethod m = object->metaObject()->method(id);
92 if (m.methodType() == QMetaMethod::Signal) {
93 QMetaObject::activate(object, id, a);
97 for (
int ii = 0; ii < metaObjects->size(); ++ii) {
98 const int globalMethodOffset = metaObjects->at(ii).methodOffset;
99 if (id < globalMethodOffset)
102 QObject *proxy = getProxy(ii);
104 const int localMethodOffset = proxy->metaObject()->methodOffset();
105 const int localMethodId = id - globalMethodOffset + localMethodOffset;
106 return proxy->qt_metacall(c, localMethodId, a);
111 case QMetaObject::CustomCall: {
112 if ((id & ~MaxExtensionCount) != ExtensionObjectId)
114 int index = id & MaxExtensionCount;
115 if (qsizetype(index) >= metaObjects->size())
117 a[0] = getProxy(index);
125 return parent->metaCall(o, c, id, a);
127 return object->qt_metacall(c, id, a);