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-08 09:53:04 +0200 |
commit | 29b580340bfae617728a31a5f1f6bd4c89a7db40 (patch) | |
tree | 905ed6747b4408c34422ff8cdea30c8294190c8d /src | |
parent | a19479c8d78f5936c85d4fc312f8bddc30347b17 (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.cpp | 23 |
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) { |