Introducing a plugin loading approach inside of the KWallet convenience API

Valentin Rusu kde at
Sun Oct 28 18:42:29 GMT 2012


After quite a while of being busy with some other, "real world", tasks, 
I managed to finish the plugin loading logic inside the KWallet API.

** The context **
Be able to switch from KWallet to KSecretsService, which is an 
implementation of the secret service [1]
This is quite a complex task to do, as existing applications must not be 

In order to do that, it was proposed [2] to introduce a plugin loading 
approach inside the KWallet logic.

** The news **
First of all, I created a branch named "ksecretsservice" in kdelibs. All 
the preparatory work was (and will) be done inside that branch. I also 
merged the master branch into that branch from time time so today it's 
in sync with it.

The Wallet logic was modified:
- load a default plugin when first called,
- all the Wallet API calls now delegate to the loaded plugin, excepting 
the following methods:
     * LocalWallet,
     * NetworkWallet,
     * PasswordFolder,
     * FormDataFolder.
- some extra, internal, methods were added to the API to let the plugin 
trigger wallet signals [3]:
     * emitWalletOpened()
     * emitWalletClosed()
     * emitFolderUpdated(const QString&)
     * emitFolderListUpdated()
     * emitFolderRemoved(const QString&)
- a new KDE service type was defined "KWallet/Plugin" via 
     * this is the type that the future wallet plugins should declare
- new header was added : kdeui/util/kwalletplugin.h
     * this holds a base class named WalletPlugin that all wallet 
plugins must implement

kdelibs/kwalletdefaultplugin was introduced :
- it gets the original org.kde.KWallet.xml file from kdeui/util,
- it gets the original code from kdeui/util/kwallet.cpp,
- as it's name suggests, it's loaded by default when applications access 
KWallet API.

I'm currently using this setup on my computer without problems. 
KWalletManager functions as usual, and the network manager plasmoid is 
continuing to load my wifi password, to only mention these applications.

I also did a full rebuild of my KDE setup (94 kdesrc-build components), 
holding my kdelibs version, to ensure no issues were introduced into 

** Next moves **
Any thoughts about this?

The current ksecretsservice branch should now be merged with kdelibs 
master in order to bring in the plugin logic. I marked the commit that 
should be merged to master with the tag "plugin.ready".
How should that be done? What would be the next steps to accomplish 
that? Who can help with that?


[3] This is the only way I managed to do that. Connecting signals did 
not work as some forum threads suggest.

Valentin Rusu (IRC valir, KDE vrusu)
KSecretsService (former KSecretService, KWallet replacement)

More information about the kde-core-devel mailing list