https://bugs.kde.org/show_bug.cgi?id=478091

--- Comment #4 from Jakob Petsovits <jpe...@petsovits.com> ---
KCModuleLoader::loadModule() has the correct metadata available when it returns
it to System Settings' ModuleView, but the instantiated KCModule object does
not carry that same metadata.

KdeConnectKcm (which powers kcm_kdeconnect.so) is using the older constructor
signature (QObject *parent, const QVariantList &args) and from what I can tell,
KPluginFactory is forgiving enough to call that instead of requiring the plugin
to support the newer version that also contains the metadata.

The KdeConnectKcm constructor then initializes its parent as simply
KCModule(qobject_cast<QWidget *>(parent)). As a subclass of KCModule, it's
allowed to do this, however KCModule also warns:

    /**
     * Utility constructor for creating a KCModule that is embedded, for
example in a KPluginWidget
     * This constructor should not be used for KCMs that are part launched in
systemsettings!
     * (...)
     */
    explicit KCModule(QObject *parent)
        : KCModule(qobject_cast<QWidget *>(parent), KPluginMetaData{})
    {
    }

So it seems the solution is for KdeConnectKcm to use the more modern
constructor signature and hand down the KPluginMetaData object to KCModule, as
it's supposed to do. I'm sure it's the same issue with the Digital Camera KCM.

I don't quite understand the KPluginWidget use case that apparently allows
plugins to use the wrong constructor, but presumably it's required for
something. It would have been nice if the KCM developers had been loudly warned
about using the wrong constructor.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to