10QQmlProxyMetaObject::QQmlProxyMetaObject(QObject *obj,
const QList<ProxyData> *mList)
11 : metaObjects(mList), proxies(
nullptr), parent(
nullptr), object(obj)
13 metaObject = metaObjects->constFirst().metaObject;
15 QObjectPrivate *op = QObjectPrivate::get(obj);
17 parent = op->metaObject;
19 op->metaObject =
this;
59 QQmlPropertyPrivate::connect(proxy, methodOffset + jj, object, localOffset + jj);
66int QQmlProxyMetaObject::metaCall(QObject *o, QMetaObject::Call c,
int id,
void **a)
68 Q_ASSERT(object == o);
71 case QMetaObject::ReadProperty:
72 case QMetaObject::WriteProperty: {
73 if (id < metaObjects->constLast().propertyOffset)
76 for (
int ii = 0; ii < metaObjects->size(); ++ii) {
77 const int globalPropertyOffset = metaObjects->at(ii).propertyOffset;
78 if (id < globalPropertyOffset)
81 QObject *proxy = getProxy(ii);
83 const int localProxyOffset = proxy->metaObject()->propertyOffset();
84 const int localProxyId = id - globalPropertyOffset + localProxyOffset;
85 return proxy->qt_metacall(c, localProxyId, a);
89 case QMetaObject::InvokeMetaMethod: {
90 if (id < metaObjects->constLast().methodOffset)
93 QMetaMethod m = object->metaObject()->method(id);
94 if (m.methodType() == QMetaMethod::Signal) {
95 QMetaObject::activate(object, id, a);
99 for (
int ii = 0; ii < metaObjects->size(); ++ii) {
100 const int globalMethodOffset = metaObjects->at(ii).methodOffset;
101 if (id < globalMethodOffset)
104 QObject *proxy = getProxy(ii);
106 const int localMethodOffset = proxy->metaObject()->methodOffset();
107 const int localMethodId = id - globalMethodOffset + localMethodOffset;
108 return proxy->qt_metacall(c, localMethodId, a);
113 case QMetaObject::CustomCall: {
114 if ((id & ~MaxExtensionCount) != ExtensionObjectId)
116 int index = id & MaxExtensionCount;
117 if (qsizetype(index) >= metaObjects->size())
119 a[0] = getProxy(index);
127 return parent->metaCall(o, c, id, a);
129 return object->qt_metacall(c, id, a);
132void QQmlProxyMetaObject::objectDestroyed(QObject *object)
137 if (QDynamicMetaObjectData *dynamicParent = std::exchange(parent,
nullptr))
138 dynamicParent->objectDestroyed(object);
139 QDynamicMetaObjectData::objectDestroyed(object);