From c8ecacb335ad3a244e07d061d27eb28e810faf06 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 4 Sep 2023 15:40:05 +0200 Subject: [PATCH] StringUtils: Use natural sorting in caseFriendlyCompare() Seems to be the right choice in the contexts we use it in. Supersedes db1d12f69abd77219a17ffe93e4ddc6ab4d65874. Task-number: QTCREATORBUG-29509 Change-Id: I3816ec57d8484404420c7bee1c2b12e8df224cb8 Reviewed-by: Eike Ziller --- src/libs/utils/stringutils.cpp | 13 +++++++++++-- .../projectexplorer/miniprojecttargetselector.cpp | 15 ++------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/libs/utils/stringutils.cpp b/src/libs/utils/stringutils.cpp index f91a8dc4ce9..c3b6c596905 100644 --- a/src/libs/utils/stringutils.cpp +++ b/src/libs/utils/stringutils.cpp @@ -14,6 +14,7 @@ #include #endif +#include #include #include #include @@ -325,10 +326,18 @@ QTCREATOR_UTILS_EXPORT int parseUsedPortFromNetstatOutput(const QByteArray &line int caseFriendlyCompare(const QString &a, const QString &b) { - int result = a.compare(b, Qt::CaseInsensitive); + static const auto makeCollator = [](Qt::CaseSensitivity caseSensitivity) { + QCollator collator; + collator.setNumericMode(true); + collator.setCaseSensitivity(caseSensitivity); + return collator; + }; + static const QCollator insensitiveCollator = makeCollator(Qt::CaseInsensitive); + const int result = insensitiveCollator.compare(a, b); if (result != 0) return result; - return a.compare(b, Qt::CaseSensitive); + static const QCollator sensitiveCollator = makeCollator(Qt::CaseSensitive); + return sensitiveCollator.compare(a, b); } QString quoteAmpersands(const QString &text) diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp index b4eac6575c1..09854835c72 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp +++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp @@ -32,7 +32,6 @@ #include #include -#include #include #include #include @@ -141,18 +140,8 @@ private: static bool compareItems(const TreeItem *ti1, const TreeItem *ti2) { - static const QCollator collator = [] { - QCollator collator; - collator.setNumericMode(true); - collator.setCaseSensitivity(Qt::CaseInsensitive); - return collator; - }(); - - const int result = collator.compare(static_cast(ti1)->rawDisplayName(), - static_cast(ti2)->rawDisplayName()); - if (result != 0) - return result < 0; - return ti1 < ti2; + return caseFriendlyCompare(static_cast(ti1)->rawDisplayName(), + static_cast(ti2)->rawDisplayName()) < 0; } class GenericModel : public TreeModel