Preconfigurable plasmoids

David Palacio dpalacio at orbitalibre.org
Thu Apr 28 22:16:45 CEST 2011


Greetings Plasma developers,

There is some code duplication in that some plasmoids share very much of
program logic but actually differ in just a setting. E.g. the recently
made ShowActivityManager plasmoid, which just is a DBus call launcher.
The Icon plasmoid is an example of this made right. I'd like to have
more generic plasmoids. Even better, I'd like to have an easy way to
configure them.

Let's see the code. config.patch shows a way to load a config metadata
file and fill a designated plasmoid with the configuration data
(metadata.desktop). We search for a X-Plasma-ConfigApplet property that
defines the plasmoid to configure and load. Additional properties define
the plasmoid settings. This allows us, for example, to easily provide
access to any webservice without code duplication.

Other uses include DBus call launchers, data visualizers.

What is missing in my code is a working way to fill/override the
plasmoid settings.

Do you like this idea? If so please help me in getting the configuration
part to work. Is the applet loading code in PluginLoader wrong? Please
tell me where I should work instead. I'm on #plasma-devel as dpalacio.

Kind regards,
David.

-------------- next part --------------
diff --git a/plasma/data/servicetypes/plasma-applet.desktop b/plasma/data/servicetypes/plasma-applet.desktop
index 8fabddb..5fbc986 100644
--- a/plasma/data/servicetypes/plasma-applet.desktop
+++ b/plasma/data/servicetypes/plasma-applet.desktop
@@ -79,6 +79,15 @@ Comment[zh_TW]=Plasma ???
 [PropertyDef::X-Plasma-API]
 Type=QString
 
+[PropertyDef::X-Plasma-ConfigApplet]
+Type=QString
+
+[PropertyDef::X-Plasma-ConfigUrl]
+Type=QString
+
+[PropertyDef::X-Plasma-ConfigIcon]
+Type=QString
+
 [PropertyDef::X-Plasma-DropMimeTypes]
 Type=QStringList
 
diff --git a/plasma/pluginloader.cpp b/plasma/pluginloader.cpp
index e57cac5..6fc4c6e 100644
--- a/plasma/pluginloader.cpp
+++ b/plasma/pluginloader.cpp
@@ -107,6 +107,26 @@ Applet *PluginLoader::loadApplet(const QString &name, uint appletId, const QVari
     }
 
     KService::Ptr offer = offers.first();
+    if(!offer->property("X-Plasma-ConfigApplet").toString().isEmpty()) {
+        QString appletName = offer->property("X-Plasma-ConfigApplet").toString();
+        kDebug() << "we have a configuration for applet" << appletName;
+        applet = loadApplet(appletName, appletId, args);
+        if(!applet) {
+            return 0;
+        }
+        KConfigGroup *config = applet->d->mainConfigGroup();
+        if(offer->property("X-Plasma-ConfigIcon").isValid()) {
+            config->writeEntry("Icon", offer->property("X-Plasma-ConfigIcon"));
+        }
+        kDebug() << "Check Url valid?" << offer->property("X-Plasma-ConfigUrl").isValid() << offer->property("X-Plasma-ConfigUrl");
+        if(offer->property("X-Plasma-ConfigUrl").isValid()) {
+            kDebug() << "write Url as" << offer->property("X-Plasma-ConfigUrl").toString();
+            config->writeEntry("Url", offer->property("X-Plasma-ConfigUrl").toString());
+        }
+        config->sync();
+        applet->restore(*config);
+        return applet;
+    }
  
     if (appletId == 0) {
         appletId = ++AppletPrivate::s_maxAppletId;
-------------- next part --------------
[Desktop Entry]
Name=KDE webview
Name[x-test]=xxGoogle Tasksxx
Comment=KDE EXample david
Comment[x-test]=xxGoogle Tasks widget. Works best if GMail autologins in Konqueror.xx
Type=Service
ServiceTypes=Plasma/Applet,Plasma/PopupApplet

X-Plasma-ConfigApplet=org.kde.configurable.webview
X-Plasma-ConfigIcon=konqueror
X-Plasma-ConfigUrl=http://kde.org/

X-KDE-PluginInfo-Author=David Palacio
X-KDE-PluginInfo-Email=dpalacio at orbitalibre.org
X-KDE-PluginInfo-Name=org.example.kde
X-KDE-PluginInfo-Version=1.0
X-KDE-PluginInfo-Website=http://kde.example.org/
X-KDE-PluginInfo-Category=Online Services
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true
X-Plasma-NotificationArea=true



More information about the Plasma-devel mailing list