sitter added a comment.
if (!service) { const QString desktopId = desktopEntry + QLatin1String(".desktop"); const auto services = KServiceTypeTrader::self()->query(QStringLiteral("Application"), QStringLiteral("exist Exec and exist [X-Flatpak-RenamedFrom]")); for (auto it = services.constBegin(); it != services.constEnd() && !service; ++it) { const QVariant renamedFrom = (*it)->property(QStringLiteral("X-Flatpak-RenamedFrom"), QVariant::String); const auto names = renamedFrom.toString().split(QChar(';')); for (const QString &name : names) { if (name == desktopId) { service = *it; break; } } } } Please try with this. KService doesn't know how to properly deserialize X-* stringlists because we have some desktop files which still use comma lists and others which use semicolon lists. Because of this a trader query for semicolon separated lists won't work unless `KService::property()` gets special hardcoded handling to read the list as an XDG type rather than a KConfig type. From a speed POV the above code and a complete query are just about the same as a query too would simply go into property() to read the property and then check against constraints in the query. The obvious alternative of course is to extend KService. IMHO putting X-* keys into KService is fairly awkward though. Another option would be to introduce `::xdgProperty()` and then extend the query language to specify a type expectation (e.g. `('%1' in XDG[X-Flatpak-RenamedFrom]`). REPOSITORY R120 Plasma Workspace REVISION DETAIL https://phabricator.kde.org/D21779 To: broulik, #plasma, sitter, davidedmundson Cc: zzag, plasma-devel, LeGast00n, ericadams, jraleigh, GB_2, ragreen, Pitel, ZrenBot, himcesjf, lesliezhai, ali-mohamed, jensreuterberg, abetts, sebas, apol, mart