mechanism for coronas to load plasmoids from custom folders

applications such as Amarok can look for their plasmoids in
their own data dir in order to not have all mixed up
This commit is contained in:
Marco Martin 2015-12-01 17:39:05 +01:00
parent 088210363c
commit 2751b72835
2 changed files with 44 additions and 2 deletions

View File

@ -56,7 +56,8 @@ class PluginLoaderPrivate
public: public:
PluginLoaderPrivate() PluginLoaderPrivate()
: isDefaultLoader(false), : isDefaultLoader(false),
packageRE("[^a-zA-Z0-9\\-_]") plasmoidsDataDir(PLASMA_RELATIVE_DATA_INSTALL_DIR),
packageRE(QLatin1String("[^a-zA-Z0-9\\-_]"))
{ {
KPackage::PackageLoader::self()->addKnownPackageStructure("Plasma/Applet", new PlasmoidPackage()); KPackage::PackageLoader::self()->addKnownPackageStructure("Plasma/Applet", new PlasmoidPackage());
KPackage::PackageLoader::self()->addKnownPackageStructure("Plasma/DataEngine", new DataEnginePackage()); KPackage::PackageLoader::self()->addKnownPackageStructure("Plasma/DataEngine", new DataEnginePackage());
@ -77,6 +78,7 @@ public:
static QString s_plasmoidsPluginDir; static QString s_plasmoidsPluginDir;
static QString s_servicesPluginDir; static QString s_servicesPluginDir;
static QString s_containmentActionsPluginDir; static QString s_containmentActionsPluginDir;
QString plasmoidsDataDir;
QRegExp packageRE; QRegExp packageRE;
}; };
@ -228,6 +230,7 @@ Applet *PluginLoader::loadApplet(const QString &name, uint appletId, const QVari
} }
} }
p.setDefaultPackageRoot(d->plasmoidsDataDir + "/plasmoids/");
// backwards compatibility: search in the root plugins directory // backwards compatibility: search in the root plugins directory
// TODO: remove when Plasma 5.4 is released // TODO: remove when Plasma 5.4 is released
{ {
@ -270,6 +273,16 @@ Applet *PluginLoader::loadApplet(const QString &name, uint appletId, const QVari
return applet; return applet;
} }
void PluginLoader::setAppletsDataDirectory(const QString &dir)
{
d->plasmoidsDataDir = dir;
}
QString PluginLoader::appletsDataDirectory() const
{
return d->plasmoidsDataDir;
}
DataEngine *PluginLoader::loadDataEngine(const QString &name) DataEngine *PluginLoader::loadDataEngine(const QString &name)
{ {
DataEngine *engine = d->isDefaultLoader ? 0 : internalLoadDataEngine(name); DataEngine *engine = d->isDefaultLoader ? 0 : internalLoadDataEngine(name);
@ -525,7 +538,11 @@ Package PluginLoader::loadPackage(const QString &packageFormat, const QString &s
structure = new PackageStructure(); structure = new PackageStructure();
structure->d->internalStructure = internalStructure; structure->d->internalStructure = internalStructure;
d->structures.insert(hashkey, structure); d->structures.insert(hashkey, structure);
return Package(structure); Package p(structure);
if (packageFormat == "Plasma/Applet") {
p.setDefaultPackageRoot(d->plasmoidsDataDir + "/plasmoids/");
}
return p;
} }
} }

View File

@ -66,6 +66,31 @@ public:
Applet *loadApplet(const QString &name, uint appletId = 0, Applet *loadApplet(const QString &name, uint appletId = 0,
const QVariantList &args = QVariantList()); const QVariantList &args = QVariantList());
/**
* Sets the data directory for plasmoids.
* By default plasmoid packages will be loaded from the
* "plasma" data directory, usually under the "share"
* subdirectory of the install prefix.
* An application that uses a custom plasma shell
* can have its private plasmoids
* in its own data directory, not having them mixeed
* with the ones from plasma desktop.
* It takes effect only in applets loaded after setting
* this, so use it at the application startup.
*
* @param dir data directory name
* @since 5.18
*/
void setAppletsDataDirectory(const QString &dir);
/**
* @return the custom applets data directory.
* Default is "plasma"
*
* @since 5.18
*/
QString appletsDataDirectory() const;
/** /**
* Load a DataEngine plugin. * Load a DataEngine plugin.
* *