From e0370b80c35f34b6634703223e913b41343158a5 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Thu, 23 Jun 2016 18:50:48 +0200 Subject: [PATCH] prototype of JS config dump a function that dumbs the currect appletsrc into a javascript file this will be used to export desktop layouts --- shell/shellcorona.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++- shell/shellcorona.h | 2 ++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp index d60131ad5..08dec379d 100644 --- a/shell/shellcorona.cpp +++ b/shell/shellcorona.cpp @@ -129,7 +129,7 @@ ShellCorona::ShellCorona(QObject *parent) dbus.registerObject(QStringLiteral("/PlasmaShell"), this); connect(this, &Plasma::Corona::startupCompleted, this, - []() { + [this]() { qDebug() << "Plasma Shell startup completed"; QDBusMessage ksplashProgressMessage = QDBusMessage::createMethodCall(QStringLiteral("org.kde.KSplash"), QStringLiteral("/KSplash"), @@ -137,6 +137,8 @@ ShellCorona::ShellCorona(QObject *parent) QStringLiteral("setStage")); ksplashProgressMessage.setArguments(QList() << QStringLiteral("desktop")); QDBusConnection::sessionBus().asyncCall(ksplashProgressMessage); + //TODO: remove + qWarning() << dumpCurrentLayoutJS(); }); // Look for theme config in plasmarc, if it isn't configured, take the theme from the @@ -310,6 +312,53 @@ void ShellCorona::setShell(const QString &shell) load(); } +QString ShellCorona::dumpCurrentLayoutJS() +{ + QString script; + + foreach (Activity *act, m_activities) { + const QString name = act->info()->name(); + script += "var " + name + "Id = createActivity(\"" + name + "\");\n"; + script += "var " + name + "DesktopsArray = desktopsForActivity(" + name + "Id);\n"; + script += "for (var j = 0; j < " + name + "DesktopsArray.length; j++) {\n"; + //enumerate containments + foreach (Plasma::Containment *cont, m_desktopContainments.value(act->id()).values()) { + script += " var cont = " + name + "DesktopsArray[j];\n\n"; + script += " cont.wallpaperPlugin = '" + cont->wallpaper() + "';\n"; + script += " cont.currentConfigGroup = \"General\";"; + + //enumerate config keys for containment + KConfigGroup cg = cont->config(); + cg = KConfigGroup(&cg, "General"); + QMap::const_iterator i; + QMap map = cg.entryMap(); + for (i = map.constBegin(); i != map.constEnd(); ++i) { + script += " cont.writeConfig(\"" + i.key() + "\", \"" + i.value() + "\");\n"; + } + + script += "\n\n"; + foreach (Plasma::Applet *applet, cont->applets()) { + script += " {\n"; + script += " var applet = cont.addWidget(\"" + applet->pluginInfo().pluginName() + "\")"; + //TODO: shortcuts group or all groups + script += " applet.currentConfigGroup = Array(\"Configuration\", \"General\");"; + + KConfigGroup cg = applet->config(); + cg = KConfigGroup(&cg, "General"); + QMap::const_iterator i; + QMap map = cg.entryMap(); + for (i = map.constBegin(); i != map.constEnd(); ++i) { + script += " applet.writeConfig(\"" + i.key() + "\", \"" + i.value() + "\");\n"; + script += " }\n"; + } + } + } + script += "}\n"; + } + + return script; +} + void ShellCorona::updateLookAndFeelPackage(const QString &file) { //only care about kdeglobals diff --git a/shell/shellcorona.h b/shell/shellcorona.h index d01db6473..5764685d4 100644 --- a/shell/shellcorona.h +++ b/shell/shellcorona.h @@ -128,6 +128,8 @@ public Q_SLOTS: */ QString shell() const; + QString dumpCurrentLayoutJS(); + ///DBUS methods void toggleDashboard(); void setDashboardShown(bool show);