aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlproperty.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2023-09-04 14:17:45 +0200
committerUlf Hermann <ulf.hermann@qt.io>2023-09-05 15:49:33 +0200
commit2fc19f2c627802d26bd385a6c9cc1f6412852ee2 (patch)
treee8a9d2ff278d5530b502c81f9e4d0b1c99d0bbd0 /src/qml/qml/qqmlproperty.cpp
parentc4e7646318ba5643673f496ab0a67745d01b7103 (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.cpp30
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;
}
}