OSDN Git Service

the (tested) fix for the QML regression
authorIvailo Monev <xakepa10@gmail.com>
Sun, 17 Apr 2016 17:33:02 +0000 (17:33 +0000)
committerIvailo Monev <xakepa10@gmail.com>
Sun, 17 Apr 2016 17:33:02 +0000 (17:33 +0000)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/core/kernel/qobject.cpp
src/core/kernel/qobjectdefs.h
src/declarative/qml/qdeclarativecontext.cpp
src/declarative/qml/qdeclarativeproxymetaobject.cpp
src/declarative/qml/qdeclarativevmemetaobject.cpp
src/declarative/util/qdeclarativeopenmetaobject.cpp

index b7cd0ae..bceaeb2 100644 (file)
@@ -3143,6 +3143,17 @@ static void queued_activate(QObject *sender, int signal, QObjectPrivate::Connect
 }
 
 /*!\internal
+   Obsolete.  (signal_index comes from indexOfMethod())
+*/
+void QMetaObject::activate(QObject *sender, int signal_index, void **argv)
+{
+    const QMetaObject *mo = sender->metaObject();
+    while (mo->methodOffset() > signal_index)
+        mo = mo->superClass();
+    activate(sender, mo, signal_index - mo->methodOffset(), argv);
+}
+
+/*!\internal
  */
 void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_signal_index,
                            void **argv)
index e977da6..c73a2a0 100644 (file)
@@ -336,6 +336,7 @@ struct Q_CORE_EXPORT QMetaObject
     static void connectSlotsByName(QObject *o);
 
     // internal index-based signal activation
+    static void activate(QObject *sender, int signal_index, void **argv);  //obsolete
     static void activate(QObject *sender, const QMetaObject *, int local_signal_index, void **argv);
 
     // internal guarded pointers
index 808466f..c766a24 100644 (file)
@@ -323,7 +323,7 @@ void QDeclarativeContext::setContextProperty(const QString &name, const QVariant
         data->refreshExpressions();
     } else {
         d->propertyValues[idx] = value;
-        QMetaObject::activate(this, this->metaObject(), idx + d->notifyIndex, 0);
+        QMetaObject::activate(this, idx + d->notifyIndex, 0);
     }
 }
 
@@ -360,7 +360,7 @@ void QDeclarativeContext::setContextProperty(const QString &name, QObject *value
         data->refreshExpressions();
     } else {
         d->propertyValues[idx] = QVariant::fromValue(value);
-        QMetaObject::activate(this, this->metaObject(), idx + d->notifyIndex, 0);
+        QMetaObject::activate(this, idx + d->notifyIndex, 0);
     }
 }
 
index 281adc3..b9c843b 100644 (file)
@@ -110,7 +110,7 @@ int QDeclarativeProxyMetaObject::metaCall(QMetaObject::Call c, int id, void **a)
                id >= metaObjects->last().methodOffset) {
         QMetaMethod m = object->metaObject()->method(id);
         if (m.methodType() == QMetaMethod::Signal) {
-            QMetaObject::activate(object, object->metaObject(), id, a);
+            QMetaObject::activate(object, id, a);
             return -1;
         }
     }
index c481868..d05a886 100644 (file)
@@ -561,7 +561,7 @@ int QDeclarativeVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a)
                 }
 
                 if (c == QMetaObject::WriteProperty && needActivate) {
-                    activate(object, object->metaObject(), methodOffset + id, 0);
+                    activate(object, methodOffset + id, 0);
                 }
 
                 return -1;
@@ -636,7 +636,7 @@ int QDeclarativeVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a)
             int plainSignals = metaData->signalCount + metaData->propertyCount +
                                metaData->aliasCount;
             if (id < plainSignals) {
-                QMetaObject::activate(object, object->metaObject(), _id, a);
+                QMetaObject::activate(object, _id, a);
                 return -1;
             }
 
@@ -720,7 +720,7 @@ QVariant QDeclarativeVMEMetaObject::readVarPropertyAsVariant(int id)
 void QDeclarativeVMEMetaObject::writeVarProperty(int id, const QScriptValue &value)
 {
     data[id].setValue(value);
-    activate(object, object->metaObject(), methodOffset + id, 0);
+    activate(object, methodOffset + id, 0);
 }
 
 void QDeclarativeVMEMetaObject::writeVarProperty(int id, const QVariant &value)
@@ -737,19 +737,19 @@ void QDeclarativeVMEMetaObject::writeVarProperty(int id, const QVariant &value)
         data[id].setValue(value);
     }
     if (needActivate)
-        activate(object, object->metaObject(), methodOffset + id, 0);
+        activate(object, methodOffset + id, 0);
 }
 
 void QDeclarativeVMEMetaObject::listChanged(int id)
 {
-    activate(object, object->metaObject(), methodOffset + id, 0);
+    activate(object, methodOffset + id, 0);
 }
 
 void QDeclarativeVMEMetaObject::list_append(QDeclarativeListProperty<QObject> *prop, QObject *o)
 {
     List *list = static_cast<List *>(prop->data);
     list->append(o);
-    QMetaObject::activate(prop->object, prop->object->metaObject(), list->notifyIndex, 0);
+    QMetaObject::activate(prop->object, list->notifyIndex, 0);
 }
 
 int QDeclarativeVMEMetaObject::list_count(QDeclarativeListProperty<QObject> *prop)
@@ -766,7 +766,7 @@ void QDeclarativeVMEMetaObject::list_clear(QDeclarativeListProperty<QObject> *pr
 {
     List *list = static_cast<List *>(prop->data);
     list->clear();
-    QMetaObject::activate(prop->object, prop->object->metaObject(), list->notifyIndex, 0);
+    QMetaObject::activate(prop->object, list->notifyIndex, 0);
 }
 
 void QDeclarativeVMEMetaObject::registerInterceptor(int index, int valueIndex, QDeclarativePropertyValueInterceptor *interceptor)
index 6eb4a13..c318292 100644 (file)
@@ -233,7 +233,7 @@ int QDeclarativeOpenMetaObject::metaCall(QMetaObject::Call c, int id, void **a)
                 propertyWrite(propId);
                 d->writeData(propId, *reinterpret_cast<QVariant *>(a[0]));
                 propertyWritten(propId);
-                activate(d->object, d->object->metaObject(), d->type->d->signalOffset + propId, 0);
+                activate(d->object, d->type->d->signalOffset + propId, 0);
             }
         } 
         return -1;
@@ -258,7 +258,7 @@ QVariant QDeclarativeOpenMetaObject::value(int id) const
 void QDeclarativeOpenMetaObject::setValue(int id, const QVariant &value)
 {
     d->writeData(id, value);
-    activate(d->object, d->object->metaObject(), d->type->d->signalOffset + id, 0);
+    activate(d->object, d->type->d->signalOffset + id, 0);
 }
 
 QVariant QDeclarativeOpenMetaObject::value(const QByteArray &name) const
@@ -300,7 +300,7 @@ void QDeclarativeOpenMetaObject::setValue(const QByteArray &name, const QVariant
             return;
 
         dataVal = val;
-        activate(d->object, d->object->metaObject(), d->type->d->signalOffset + d, 0);
+        activate(d->object, d->type->d->signalOffset + id, 0);
     }
 }