aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmltypecompiler.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-02-19 17:37:54 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-02-19 19:21:23 +0000
commite27bcd5abd2364a4b184b105d1b5b6111d19cbd9 (patch)
tree5aad02fcaf37b7c4e7e4c71f8ea29fb491aa4a8e /src/qml/qml/qqmltypecompiler.cpp
parent903f643c501a41473e0c8f4f8bd78fa4a52bcd7d (diff)
QML: Make retrieval of a signal name from a handler accessible
We want to do that in other places, too. Change-Id: Id42495d239c2dccffa390478c8b57ec1acab7408 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 1daee0b03050487cfc4b483262ca73e5a24267ff) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/qml/qml/qqmltypecompiler.cpp')
-rw-r--r--src/qml/qml/qqmltypecompiler.cpp26
1 files changed, 8 insertions, 18 deletions
diff --git a/src/qml/qml/qqmltypecompiler.cpp b/src/qml/qml/qqmltypecompiler.cpp
index f04272e5b9..3be3c6fc0e 100644
--- a/src/qml/qml/qqmltypecompiler.cpp
+++ b/src/qml/qml/qqmltypecompiler.cpp
@@ -356,30 +356,20 @@ bool SignalHandlerConverter::convertSignalHandlerExpressionsToFunctionDeclaratio
QQmlPropertyResolver resolver(propertyCache);
- Q_ASSERT(bindingPropertyName.startsWith(QLatin1String("on")));
- QString signalNameCandidate = bindingPropertyName;
- signalNameCandidate.remove(0, 2);
-
- // Note that the property name could start with any alpha or '_' or '$' character,
- // so we need to do the lower-casing of the first alpha character.
- for (int firstAlphaIndex = 0; firstAlphaIndex < signalNameCandidate.size(); ++firstAlphaIndex) {
- if (signalNameCandidate.at(firstAlphaIndex).isUpper()) {
- signalNameCandidate[firstAlphaIndex] = signalNameCandidate.at(firstAlphaIndex).toLower();
- break;
- }
- }
+ const QString signalName = QmlIR::IRBuilder::signalNameFromSignalPropertyName(
+ bindingPropertyName);
QString qPropertyName;
- if (signalNameCandidate.endsWith(QLatin1String("Changed")))
- qPropertyName = signalNameCandidate.mid(0, signalNameCandidate.length() - static_cast<int>(strlen("Changed")));
+ if (signalName.endsWith(QLatin1String("Changed")))
+ qPropertyName = signalName.mid(0, signalName.length() - static_cast<int>(strlen("Changed")));
QList<QString> parameters;
bool notInRevision = false;
- QQmlPropertyData * const signal = resolver.signal(signalNameCandidate, &notInRevision);
- QQmlPropertyData * const signalPropertyData = resolver.property(signalNameCandidate, /*notInRevision ptr*/nullptr);
+ QQmlPropertyData * const signal = resolver.signal(signalName, &notInRevision);
+ QQmlPropertyData * const signalPropertyData = resolver.property(signalName, /*notInRevision ptr*/nullptr);
QQmlPropertyData * const qPropertyData = !qPropertyName.isEmpty() ? resolver.property(qPropertyName) : nullptr;
- QString finalSignalHandlerPropertyName = signalNameCandidate;
+ QString finalSignalHandlerPropertyName = signalName;
uint flags = QV4::CompiledData::Binding::IsSignalHandlerExpression;
const bool isPropertyObserver = !signalPropertyData && qPropertyData && qPropertyData->isBindable();
@@ -439,7 +429,7 @@ bool SignalHandlerConverter::convertSignalHandlerExpressionsToFunctionDeclaratio
}
}
- QHash<QString, QStringList>::ConstIterator entry = customSignals.constFind(signalNameCandidate);
+ QHash<QString, QStringList>::ConstIterator entry = customSignals.constFind(signalName);
if (entry == customSignals.constEnd() && !qPropertyName.isEmpty())
entry = customSignals.constFind(qPropertyName);