aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/common
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-05 15:49:33 +0200
commit2fc19f2c627802d26bd385a6c9cc1f6412852ee2 (patch)
treee8a9d2ff278d5530b502c81f9e4d0b1c99d0bbd0 /src/qml/common
parentc4e7646318ba5643673f496ab0a67745d01b7103 (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.cpp19
-rw-r--r--src/qml/common/qqmlsignalnames_p.h3
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