port away from sycoca everything possible

use package and kplugin listing instead of sycoca to list layout templates
and wallpapers
wilder-5.14
Marco Martin 11 years ago
parent 3ecffbfcb0
commit 9846f4b0af
  1. 1
      shell/CMakeLists.txt
  2. 10
      shell/scripting/applet.cpp
  3. 15
      shell/scripting/scriptengine.cpp
  4. 30
      shell/shellcorona.cpp

@ -82,6 +82,7 @@ target_link_libraries(plasmashell
KF5::Screen
KF5::Declarative
KF5::XmlGui
KF5::Package
)
target_include_directories(plasmashell PRIVATE "${CMAKE_BINARY_DIR}")
target_compile_definitions(plasmashell PRIVATE -DPROJECT_VERSION="${PROJECT_VERSION}")

@ -22,7 +22,6 @@
#include <QAction>
#include <kservice.h>
#include <kservicetypetrader.h>
#include <kdeclarative/configpropertymap.h>
#include <kconfigloader.h>
@ -233,14 +232,7 @@ QString Applet::version() const
return QString();
}
QString type = app->pluginInfo().pluginName();
KService::List services = KServiceTypeTrader::self()->query("Plasma/Applet", "[X-KDE-PluginInfo-Name] == '" + type + "'");
if (services.isEmpty()) {
return QString();
}
KPluginInfo info(services.first());
return info.version();
return app->pluginInfo().version();
}
void Applet::setLocked(bool locked)

@ -730,17 +730,10 @@ QScriptValue ScriptEngine::knownWallpaperPlugins(QScriptContext *context, QScrip
constraint.append("[X-Plasma-FormFactors] ~~ '").append(formFactor).append("'");
}
KService::List services = KServiceTypeTrader::self()->query("Plasma/Wallpaper", constraint);
QScriptValue rv = engine->newArray(services.size());
foreach (const KService::Ptr service, services) {
QList<KServiceAction> modeActions = service->actions();
QScriptValue modes = engine->newArray(modeActions.size());
int i = 0;
foreach (const KServiceAction &action, modeActions) {
modes.setProperty(i++, action.name());
}
rv.setProperty(service->name(), modes);
QList<KPluginMetaData> wallpapers = KPackage::PackageLoader::self()->listPackages("Plasma/Wallpaper", QString());
QScriptValue rv = engine->newArray(wallpapers.size());
for (auto wp : wallpapers) {
rv.setProperty(wp.name(), engine->newArray(0));
}
return rv;

@ -37,7 +37,6 @@
#include <kactivities/controller.h>
#include <kactivities/consumer.h>
#include <ksycoca.h>
#include <kservicetypetrader.h>
#include <KGlobalAccel>
#include <KAuthorized>
#include <KWindowSystem>
@ -1284,9 +1283,12 @@ void ShellCorona::checkAddPanelAction(const QStringList &sycocaChanges)
m_addPanelsMenu = 0;
KPluginInfo::List panelContainmentPlugins = Plasma::PluginLoader::listContainmentsOfType("Panel");
const QString constraint = QString("[X-Plasma-Shell] == '%1' and 'panel' ~in [X-Plasma-ContainmentCategories]")
.arg(qApp->applicationName());
KService::List templates = KServiceTypeTrader::self()->query("Plasma/LayoutTemplate", constraint);
auto filter = [](const KPluginMetaData &md) -> bool
{
return md.value("X-Plasma-Shell") == qApp->applicationName() && md.value("X-Plasma-ContainmentCategories").contains("panel");
};
QList<KPluginMetaData> templates = KPackage::PackageLoader::self()->findPackages("Plasma/LayoutTemplate", QString(), filter);
if (panelContainmentPlugins.count() + templates.count() == 1) {
m_addPanelAction = new QAction(i18n("Add Panel"), this);
@ -1314,23 +1316,25 @@ void ShellCorona::populateAddPanelsMenu()
const KPluginInfo emptyInfo;
KPluginInfo::List panelContainmentPlugins = Plasma::PluginLoader::listContainmentsOfType("Panel");
QMap<QString, QPair<KPluginInfo, KService::Ptr> > sorted;
QMap<QString, QPair<KPluginInfo, KPluginMetaData> > sorted;
foreach (const KPluginInfo &plugin, panelContainmentPlugins) {
sorted.insert(plugin.name(), qMakePair(plugin, KService::Ptr(0)));
sorted.insert(plugin.name(), qMakePair(plugin, KPluginMetaData()));
}
const QString constraint = QString("[X-Plasma-Shell] == '%1' and 'panel' in [X-Plasma-ContainmentCategories]")
.arg(qApp->applicationName());
KService::List templates = KServiceTypeTrader::self()->query("Plasma/LayoutTemplate", constraint);
foreach (const KService::Ptr &service, templates) {
sorted.insert(service->name(), qMakePair(emptyInfo, service));
auto filter = [](const KPluginMetaData &md) -> bool
{
return md.value("X-Plasma-Shell") == qApp->applicationName() && md.value("X-Plasma-ContainmentCategories").contains("panel");
};
QList<KPluginMetaData> templates = KPackage::PackageLoader::self()->findPackages("Plasma/LayoutTemplate", QString(), filter);
for (auto tpl : templates) {
sorted.insert(tpl.name(), qMakePair(emptyInfo, tpl));
}
QMapIterator<QString, QPair<KPluginInfo, KService::Ptr> > it(sorted);
QMapIterator<QString, QPair<KPluginInfo, KPluginMetaData> > it(sorted);
KPackage::Package package = KPackage::PackageLoader::self()->loadPackage("Plasma/LayoutTemplate");
while (it.hasNext()) {
it.next();
QPair<KPluginInfo, KService::Ptr> pair = it.value();
QPair<KPluginInfo, KPluginMetaData> pair = it.value();
if (pair.first.isValid()) {
KPluginInfo plugin = pair.first;
QAction *action = m_addPanelsMenu->addAction(i18n("Empty %1", plugin.name()));

Loading…
Cancel
Save