From 2fc19f2c627802d26bd385a6c9cc1f6412852ee2 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 4 Sep 2023 14:17:45 +0200 Subject: 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 --- src/qml/common/qqmlsignalnames.cpp | 19 +++++++++++++++++++ src/qml/common/qqmlsignalnames_p.h | 3 +++ 2 files changed, 22 insertions(+) (limited to 'src/qml/common') diff --git a/src/qml/common/qqmlsignalnames.cpp b/src/qml/common/qqmlsignalnames.cpp index e66c26d4e2..d2a23205a6 100644 --- a/src/qml/common/qqmlsignalnames.cpp +++ b/src/qml/common/qqmlsignalnames.cpp @@ -189,6 +189,25 @@ std::optional QQmlSignalNames::handlerNameToSignalName(QStringView hand return handlerNameToSignalNameHelper(handler); } +/*! +\internal +Returns a signal name from \a handlerName string. Do not use it on changed handlers, see +changedHandlerNameToSignalName for that! Accepts improperly capitalized handler names and +incorrectly resolves signal names that start with '_' or '$'. +*/ +std::optional QQmlSignalNames::badHandlerNameToSignalName(QStringView handler) +{ + if (handler.size() <= StrlenOn || !handler.startsWith(On)) + return {}; + + QString signalName = handler.sliced(StrlenOn).toString(); + + // This is quite wrong. But we need it for backwards compatibility. + signalName.front() = signalName.front().toLower(); + + return signalName; +} + /*! \internal Returns a signal name from \a changedHandlerName string. Makes sure not to lowercase the 'C' from diff --git a/src/qml/common/qqmlsignalnames_p.h b/src/qml/common/qqmlsignalnames_p.h index 753f2ca97a..9c3d192666 100644 --- a/src/qml/common/qqmlsignalnames_p.h +++ b/src/qml/common/qqmlsignalnames_p.h @@ -49,6 +49,9 @@ public: static bool isHandlerName(QStringView signalName); static QString addPrefixToPropertyName(QStringView prefix, QStringView propertyName); + + // ### Qt7: remove this + static std::optional badHandlerNameToSignalName(QStringView handler); }; QT_END_NAMESPACE -- cgit v1.2.3