aboutsummaryrefslogtreecommitdiffstats
path: root/src
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-08 09:53:04 +0200
commit29b580340bfae617728a31a5f1f6bd4c89a7db40 (patch)
tree905ed6747b4408c34422ff8cdea30c8294190c8d /src
parenta19479c8d78f5936c85d4fc312f8bddc30347b17 (diff)
QQmlProperty: Accept badly capitalized signal handler names
... but warn about them. Apparently we did accept them prior to 6.4. Fixes: QTBUG-116576 Change-Id: If890db85f5a8d71c0bcdfaf646ee9f01765a0b3c Reviewed-by: Sami Shalayel <sami.shalayel@qt.io> (cherry picked from commit 2fc19f2c627802d26bd385a6c9cc1f6412852ee2)
Diffstat (limited to 'src')
-rw-r--r--src/qml/qml/qqmlproperty.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp
index 0e44df219f..ba6a0971f2 100644
--- a/src/qml/qml/qqmlproperty.cpp
+++ b/src/qml/qml/qqmlproperty.cpp
@@ -380,6 +380,9 @@ void QQmlPropertyPrivate::initProperty(QObject *obj, const QString &name,
return false;
};
+ static constexpr QLatin1String On("on");
+ static constexpr qsizetype StrlenOn = On.size();
+
const QString terminalString = terminal.toString();
if (QmlIR::IRBuilder::isSignalPropertyName(terminalString)) {
QString signalName = terminalString.mid(2);
@@ -412,6 +415,26 @@ void QQmlPropertyPrivate::initProperty(QObject *obj, const QString &name,
} else if (findSignalInMetaObject(signalName.toUtf8())) {
return;
}
+ } else if (terminalString.size() > StrlenOn && terminalString.startsWith(On)) {
+ // This is quite wrong. But we need it for backwards compatibility.
+ QString signalName = terminalString.sliced(2);
+ signalName.front() = signalName.front().toLower();
+
+ QString handlerName = On + signalName;
+ const auto end = handlerName.end();
+ auto result = std::find_if(
+ std::next(handlerName.begin(), StrlenOn), end,
+ [](const QChar &c) { return c.isLetter(); });
+ if (result != end)
+ *result = result->toUpper();
+
+ qWarning()
+ << terminalString
+ << "is not a properly capitalized signal handler name."
+ << handlerName
+ << "would be correct.";
+ if (findSignalInMetaObject(signalName.toUtf8()))
+ return;
}
if (ddata && ddata->propertyCache) {