File 2000-krunner.patch of Package systemsettings6

diff --git a/runner/systemsettingsrunner.cpp b/runner/systemsettingsrunner.cpp
index d33b7906ce5019cc6b9d0dcfb3df6574d946e80a..bd7b01556b77b5eb2e1d8fc7c45144eee4db0ab4 100644
--- a/runner/systemsettingsrunner.cpp
+++ b/runner/systemsettingsrunner.cpp
@@ -19,11 +19,46 @@
 #include <KIO/CommandLauncherJob>
 #include <KLocalizedString>
 #include <KNotificationJobUiDelegate>
+#include <KStringHandler>
 #include <KSycoca>
 #include <PlasmaActivities/ResourceInstance>
 
 #include "../app/kcmmetadatahelpers.h"
 
+namespace
+{
+bool acceptMatch(const QString &text, const QString &query, KRunner::QueryMatch &match, qreal relevance)
+{
+    if (text.isEmpty() || query.isEmpty()) {
+        return false;
+    }
+
+    if (text.compare(query, Qt::CaseInsensitive) == 0) {
+        match.setCategoryRelevance(KRunner::QueryMatch::CategoryRelevance::Highest);
+        match.setRelevance(relevance);
+
+        return true;
+    }
+
+    if (text.startsWith(query, Qt::CaseInsensitive)) {
+        match.setCategoryRelevance(KRunner::QueryMatch::CategoryRelevance::High);
+        match.setRelevance(relevance * 0.5);
+
+        return true;
+    }
+
+    if (KStringHandler::logicalLength(query) > 2 && text.contains(query, Qt::CaseInsensitive)) {
+        match.setCategoryRelevance(KRunner::QueryMatch::CategoryRelevance::Moderate);
+        match.setRelevance(relevance * 0.25);
+
+        return true;
+    }
+
+    return false;
+}
+
+} // namespace
+
 K_PLUGIN_CLASS_WITH_JSON(SystemsettingsRunner, "systemsettingsrunner.json")
 
 SystemsettingsRunner::SystemsettingsRunner(QObject *parent, const KPluginMetaData &metaData)
@@ -44,67 +79,21 @@ void SystemsettingsRunner::match(KRunner::RunnerContext &context)
     const QString query = context.query();
     const QStringList queryWords{query.split(QLatin1Char(' '))};
     for (const KPluginMetaData &data : std::as_const(m_modules)) {
-        qreal relevance = -1;
-        const auto checkMatchAndRelevance = [&query, &relevance, &queryWords](const QString &value, qreal relevanceValue) {
-            if (value.startsWith(query, Qt::CaseInsensitive)) {
-                relevance = relevanceValue + 0.1;
-                return true;
-            }
-            for (const QString &queryWord : queryWords) {
-                if (!value.contains(queryWord, Qt::CaseInsensitive)) {
-                    return false;
-                }
-            }
-            relevance = relevanceValue;
-            return true;
-        };
-
-        const QString name = data.name();
-        const QString description = data.description();
-        const QStringList keywords = data.value(QStringLiteral("X-KDE-Keywords")).split(QLatin1Char(','));
-        // check for matches and set relevance
-        if (query.length() < 3) {
-            if (name.startsWith(query, Qt::CaseInsensitive)) {
-                relevance = 0.9;
-            } else {
-                continue;
-            }
-        } else if (name.compare(query, Qt::CaseInsensitive) == 0) {
-            relevance = 1;
-        } else if (checkMatchAndRelevance(name, 0.8)) { // name starts with query or contains all query words
-        } else if (checkMatchAndRelevance(description, 0.5)) { // description starts with query or contains all query words
-        } else if (std::any_of(keywords.begin(), keywords.end(), [&query](const QString &keyword) {
-                       return keyword.startsWith(query, Qt::CaseInsensitive);
-                   })) {
-            if (keywords.contains(query, Qt::CaseInsensitive)) { // any of the keywords matches query
-                relevance = 0.5;
-            } else { // any of the keywords starts with query
-                relevance = 0.2;
-            }
-        } else { // none of the properties matches
-            continue; // skip this KCM
-        }
-
-        KRunner::QueryMatch::CategoryRelevance categoryRelevance = KRunner::QueryMatch::CategoryRelevance::Low;
-        if (name.compare(query, Qt::CaseInsensitive) == 0) { // name matches exactly
-            categoryRelevance = KRunner::QueryMatch::CategoryRelevance::Highest;
-        } else if (name.startsWith(query, Qt::CaseInsensitive)) {
-            categoryRelevance = KRunner::QueryMatch::CategoryRelevance::High;
-        } else if (description.startsWith(query, Qt::CaseInsensitive)) {
-            categoryRelevance = KRunner::QueryMatch::CategoryRelevance::Moderate;
-        } else if (keywords.contains(query, Qt::CaseInsensitive)) { // any of the keywords matches exactly
-            categoryRelevance = KRunner::QueryMatch::CategoryRelevance::Moderate;
-        }
-
         KRunner::QueryMatch match(this);
-        match.setText(name);
+        match.setText(data.name());
         match.setUrls({QUrl(QLatin1String("applications://") + data.pluginId())});
-        match.setSubtext(description);
+        match.setSubtext(data.description());
         match.setIconName(data.iconName()); // If it is not set, KRunner will fall back to the runner's icon
         match.setId(data.pluginId()); // KRunner needs the id to adjust the relevance for often launched KCMs
         match.setData(QVariant::fromValue(data));
-        match.setRelevance(relevance);
-        match.setCategoryRelevance(categoryRelevance);
+
+        static const qreal nameRelevance = 1;
+        static const qreal descriptionRelevance = 0.9;
+
+        if (!acceptMatch(data.name(), query, match, nameRelevance)
+            && !acceptMatch(data.description(), query, match, descriptionRelevance)) {
+            continue;
+        }
 
         if (isKinfoCenterKcm(data)) {
             match.setMatchCategory(i18nd("systemsettings", "System Information"));
openSUSE Build Service is sponsored by