diff options
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper.cpp | 5 | ||||
-rw-r--r-- | tests/auto/qml/qjsengine/tst_qjsengine.cpp | 20 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 1cfd2d88ec..dd58e0609b 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -1315,6 +1315,11 @@ static const QQmlPropertyData * RelatedMethod(QObject *object, methodOffset -= QMetaObject_methods(mo); } + // If we've been called before with the same override index, then + // we can't go any further... + if (&dummy == current && dummy.coreIndex == current->overrideIndex) + return 0; + QMetaMethod method = mo->method(current->overrideIndex); dummy.load(method); diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp index ed6b5a9d42..3357aa7643 100644 --- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp +++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp @@ -163,6 +163,9 @@ tst_QJSEngine::~tst_QJSEngine() { } +Q_DECLARE_METATYPE(Qt::KeyboardModifier) +Q_DECLARE_METATYPE(Qt::KeyboardModifiers) + class OverloadedSlots : public QObject { Q_OBJECT @@ -175,6 +178,7 @@ signals: void slotWithoutArgCalled(); void slotWithSingleArgCalled(const QString &arg); void slotWithArgumentsCalled(const QString &arg1, const QString &arg2, const QString &arg3); + void slotWithOverloadedArgumentsCalled(const QString &arg, Qt::KeyboardModifier modifier, Qt::KeyboardModifiers moreModifiers); public slots: void slotToCall() { emit slotWithoutArgCalled(); } @@ -183,6 +187,10 @@ public slots: { slotWithArgumentsCalled(arg, arg2, arg3); } + void slotToCall(const QString &arg, Qt::KeyboardModifier modifier, Qt::KeyboardModifiers blah = Qt::ShiftModifier) + { + emit slotWithOverloadedArgumentsCalled(arg, modifier, blah); + } }; void tst_QJSEngine::callQObjectSlot() @@ -228,6 +236,18 @@ void tst_QJSEngine::callQObjectSlot() QCOMPARE(arguments.at(1).toString(), QString("arg2")); QCOMPARE(arguments.at(2).toString(), QString("arg3")); } + + { + QSignalSpy spy(&dummy, SIGNAL(slotWithOverloadedArgumentsCalled(QString, Qt::KeyboardModifier, Qt::KeyboardModifiers))); + eng.evaluate(QStringLiteral("dummy.slotToCall('arg', %1);").arg(QString::number(Qt::ControlModifier))); + QCOMPARE(spy.count(), 1); + + const QList<QVariant> arguments = spy.first(); + QCOMPARE(arguments.at(0).toString(), QString("arg")); + QCOMPARE(arguments.at(1).toInt(), int(Qt::ControlModifier)); + QCOMPARE(int(qvariant_cast<Qt::KeyboardModifiers>(arguments.at(2))), int(Qt::ShiftModifier)); + + } } void tst_QJSEngine::constructWithParent() |