diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-09-04 14:17:45 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2023-09-05 15:49:33 +0200 |
commit | 2fc19f2c627802d26bd385a6c9cc1f6412852ee2 (patch) | |
tree | e8a9d2ff278d5530b502c81f9e4d0b1c99d0bbd0 /src/qml/qml/qqmlproperty.cpp | |
parent | c4e7646318ba5643673f496ab0a67745d01b7103 (diff) |
QQmlProperty: Accept badly capitalized signal handler names
... but warn about them. Apparently we did accept them prior to 6.4.
Fixes: QTBUG-116576
Pick-to: 6.5 6.6
Change-Id: If890db85f5a8d71c0bcdfaf646ee9f01765a0b3c
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlproperty.cpp')
-rw-r--r-- | src/qml/qml/qqmlproperty.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp index 7437eefa85..099512192f 100644 --- a/src/qml/qml/qqmlproperty.cpp +++ b/src/qml/qml/qqmlproperty.cpp @@ -381,11 +381,11 @@ void QQmlPropertyPrivate::initProperty(QObject *obj, const QString &name, }; const QString terminalString = terminal.toString(); - if (auto signalName = QQmlSignalNames::handlerNameToSignalName(terminalString)) { + const auto findSignal = [&](const QString &signalName) { if (ddata && ddata->propertyCache) { // Try method - const QQmlPropertyData *d = - ddata->propertyCache->property(*signalName, currentObject, context); + const QQmlPropertyData *d + = ddata->propertyCache->property(signalName, currentObject, context); // ### Qt7: This code treats methods as signals. It should use d->isSignal(). // That would be a change in behavior, though. Right now you can construct a @@ -396,13 +396,29 @@ void QQmlPropertyPrivate::initProperty(QObject *obj, const QString &name, if (d) { object = currentObject; core = *d; - return; + return true; } - if (findChangeSignal(terminalString)) - return; - } else if (findSignalInMetaObject(signalName->toUtf8())) { + return findChangeSignal(terminalString); + } + + return findSignalInMetaObject(signalName.toUtf8()); + }; + + auto signalName = QQmlSignalNames::handlerNameToSignalName(terminalString); + if (signalName) { + if (findSignal(*signalName)) return; + } else { + signalName = QQmlSignalNames::badHandlerNameToSignalName(terminalString); + if (signalName) { + qWarning() + << terminalString + << "is not a properly capitalized signal handler name." + << QQmlSignalNames::signalNameToHandlerName(*signalName) + << "would be correct."; + if (findSignal(*signalName)) + return; } } |