Recognize X-KDE-FormFactor as stringlist

Review Request #124066 - Created June 11, 2015 and submitted

Sebastian Kügler
arichardson, dfaure

This patch adds X-KDE-FormFactor to the keys recognized as stringlists.

We would like to see this to go in to allow us to filter plugins (KCMs for example) by form factor, so we only display UI plugins that are suitable for a given target device.

The idea is that plugins indicate which form factor (for example media center, tablet, desktop, etc...) they're suitable for, and the "host application" filters based on these.

If this approach is deemed valid, I'd be happy to add convenience API to KPluginMetaData, i.e. QStringList KPluginMetaData::formFactor(). This patch would be the minimal implementation we'd need.

The naming of the key is of course open to better suggestions.

added autotest, also implemented using this in the Plasma Active settings app as proof-of-concept, works like a charm.

Bhushan Shah
Sebastian Kügler
David Faure
Sebastian Kügler
Sebastian Kügler
David Faure
Sebastian Kügler
Review request changed

Status: Closed (submitted)

Change Summary:

Submitted with commit 499c15cccea14f97114a06a64082ac57660926bf by Sebastian Kügler to branch master.
Alexander Potashev

Why don't we store plugin metadata in JSON files? Look how they're used for KDevelop:

I'm afraid that if we keep this patch and it gets released, but then we realize that X-KDE-FormFactor is not necessary in .desktop (e.g. we only have it in plugins that all use .json), afterwards we'll have to support X-KDE-FormFactor in kcoreaddons until the end of the KF5.x series. 5.12 is tagging tomorrow ;)

  1. We do store plugin metadata in JSON files. This review has API to read the FormFactors key from JSON metadata.

    In addition, it allows to read the X-KDE-FormFactors key from .desktop files. The latter is needed for backwards compatibility (not all plugins use JSON exclusively as some apps still rely on KService).

    Also, this review is not just about plugins, but about all kinds of cases where KPluginMetaData can be used, for example for installed applications (.desktop files in /usr/share/applications, for example).