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-05 15:49:33 +0200 |
commit | 2fc19f2c627802d26bd385a6c9cc1f6412852ee2 (patch) | |
tree | e8a9d2ff278d5530b502c81f9e4d0b1c99d0bbd0 /src/qml/common | |
parent | c4e7646318ba5643673f496ab0a67745d01b7103 (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/common')
-rw-r--r-- | src/qml/common/qqmlsignalnames.cpp | 19 | ||||
-rw-r--r-- | src/qml/common/qqmlsignalnames_p.h | 3 |
2 files changed, 22 insertions, 0 deletions
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 @@ -191,6 +191,25 @@ std::optional<QString> QQmlSignalNames::handlerNameToSignalName(QStringView hand /*! \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<QString> 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 Changed. */ 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<QString> badHandlerNameToSignalName(QStringView handler); }; QT_END_NAMESPACE |