diff --git a/src/plasma/applet.cpp b/src/plasma/applet.cpp index 7b6e6eb0f..7e424078a 100644 --- a/src/plasma/applet.cpp +++ b/src/plasma/applet.cpp @@ -90,7 +90,7 @@ Applet::Applet(QObject *parentObject, const QVariantList &args) // WARNING: do not access config() OR globalConfig() in this method! // that requires a scene, which is not available at this point - d->init(); + d->init(QString(), args.mid(2)); d->setupPackage(); } diff --git a/src/plasma/dataengine.cpp b/src/plasma/dataengine.cpp index 8969ff822..d0befc20e 100644 --- a/src/plasma/dataengine.cpp +++ b/src/plasma/dataengine.cpp @@ -65,7 +65,7 @@ DataEngine::DataEngine(const KPluginInfo &plugin, QObject *parent) DataEngine::DataEngine(QObject *parent, const QVariantList &args) : QObject(parent), - d(new DataEnginePrivate(this, KPluginInfo(args))) + d(new DataEnginePrivate(this, KPluginInfo(args), args)) { if (d->script) { d->setupScriptSupport(); @@ -406,7 +406,7 @@ void DataEngine::setStorageEnabled(const QString &source, bool store) } // Private class implementations -DataEnginePrivate::DataEnginePrivate(DataEngine *e, const KPluginInfo &info) +DataEnginePrivate::DataEnginePrivate(DataEngine *e, const KPluginInfo &info, const QVariantList &args) : q(e), dataEngineDescription(info), refCount(-1), // first ref @@ -437,7 +437,7 @@ DataEnginePrivate::DataEnginePrivate(DataEngine *e, const KPluginInfo &info) package->setPath(path); if (package->isValid()) { - script = Plasma::loadScriptEngine(api, q); + script = Plasma::loadScriptEngine(api, q, args); } if (!script) { diff --git a/src/plasma/private/applet_p.cpp b/src/plasma/private/applet_p.cpp index 9feefed23..59ca64d84 100644 --- a/src/plasma/private/applet_p.cpp +++ b/src/plasma/private/applet_p.cpp @@ -97,7 +97,7 @@ AppletPrivate::~AppletPrivate() delete modificationsTimer; } -void AppletPrivate::init(const QString &packagePath) +void AppletPrivate::init(const QString &packagePath, const QVariantList &args) { // WARNING: do not access config() OR globalConfig() in this method! // that requires a Corona, which is not available at this point @@ -145,7 +145,7 @@ void AppletPrivate::init(const QString &packagePath) // now we try and set up the script engine. // it will be parented to this applet and so will get // deleted when the applet does - script = Plasma::loadScriptEngine(api, q); + script = Plasma::loadScriptEngine(api, q, args); if (!script) { delete package; diff --git a/src/plasma/private/applet_p.h b/src/plasma/private/applet_p.h index fcce650af..f62da0756 100644 --- a/src/plasma/private/applet_p.h +++ b/src/plasma/private/applet_p.h @@ -46,7 +46,7 @@ public: AppletPrivate(KService::Ptr service, const KPluginInfo *info, int uniqueID, Applet *applet); virtual ~AppletPrivate(); - void init(const QString &packagePath = QString()); + void init(const QString &packagePath = QString(), const QVariantList &args = QVariantList()); // the interface virtual void showConfigurationRequiredMessage(bool show, const QString &reason); diff --git a/src/plasma/private/dataengine_p.h b/src/plasma/private/dataengine_p.h index 3dad942d0..52ade9400 100644 --- a/src/plasma/private/dataengine_p.h +++ b/src/plasma/private/dataengine_p.h @@ -34,7 +34,7 @@ class Service; class DataEnginePrivate { public: - DataEnginePrivate(DataEngine *e, const KPluginInfo &info); + DataEnginePrivate(DataEngine *e, const KPluginInfo &info, const QVariantList &args = QVariantList()); ~DataEnginePrivate(); DataContainer *source(const QString &sourceName, bool createWhenMissing = true); void connectSource(DataContainer *s, QObject *visualization, uint pollingInterval, diff --git a/src/plasma/scripting/scriptengine.cpp b/src/plasma/scripting/scriptengine.cpp index 30fbb6ba6..cc407e723 100644 --- a/src/plasma/scripting/scriptengine.cpp +++ b/src/plasma/scripting/scriptengine.cpp @@ -139,11 +139,11 @@ KService::List engineOffers(const QString &language, Types::ComponentType type) return offers; } -ScriptEngine *loadEngine(const QString &language, Types::ComponentType type, QObject *parent) +ScriptEngine *loadEngine(const QString &language, Types::ComponentType type, QObject *parent, + const QVariantList &args = QVariantList()) { KService::List offers = engineOffers(language, type); - QVariantList args; QString error; ScriptEngine *engine = 0; @@ -176,10 +176,10 @@ ScriptEngine *loadEngine(const QString &language, Types::ComponentType type, QOb return 0; } -AppletScript *loadScriptEngine(const QString &language, Applet *applet) +AppletScript *loadScriptEngine(const QString &language, Applet *applet, const QVariantList &args) { AppletScript *engine = - static_cast(loadEngine(language, Types::AppletComponent, applet)); + static_cast(loadEngine(language, Types::AppletComponent, applet, args)); if (engine) { engine->setApplet(applet); @@ -188,10 +188,10 @@ AppletScript *loadScriptEngine(const QString &language, Applet *applet) return engine; } -DataEngineScript *loadScriptEngine(const QString &language, DataEngine *dataEngine) +DataEngineScript *loadScriptEngine(const QString &language, DataEngine *dataEngine, const QVariantList &args) { DataEngineScript *engine = - static_cast(loadEngine(language, Types::DataEngineComponent, dataEngine)); + static_cast(loadEngine(language, Types::DataEngineComponent, dataEngine, args)); if (engine) { engine->setDataEngine(dataEngine); diff --git a/src/plasma/scripting/scriptengine.h b/src/plasma/scripting/scriptengine.h index 76cd6bf1d..e1e7be85d 100644 --- a/src/plasma/scripting/scriptengine.h +++ b/src/plasma/scripting/scriptengine.h @@ -92,7 +92,7 @@ PLASMA_EXPORT QStringList knownLanguages(Types::ComponentTypes types); * @return pointer to the AppletScript or 0 on failure; the caller is responsible * for the return object which will be parented to the Applet **/ -PLASMA_EXPORT AppletScript *loadScriptEngine(const QString &language, Applet *applet); +PLASMA_EXPORT AppletScript *loadScriptEngine(const QString &language, Applet *applet, const QVariantList &args); /** * Loads an DataEngine script engine for the given language. @@ -102,7 +102,7 @@ PLASMA_EXPORT AppletScript *loadScriptEngine(const QString &language, Applet *ap * @return pointer to the DataEngineScript or 0 on failure; the caller is responsible * for the return object which will be parented to the DataEngine **/ -PLASMA_EXPORT DataEngineScript *loadScriptEngine(const QString &language, DataEngine *dataEngine); +PLASMA_EXPORT DataEngineScript *loadScriptEngine(const QString &language, DataEngine *dataEngine, const QVariantList &args); } // namespace Plasma diff --git a/src/scriptengines/qml/plasmoid/declarativeappletscript.cpp b/src/scriptengines/qml/plasmoid/declarativeappletscript.cpp index 04273e97d..24c39dda4 100644 --- a/src/scriptengines/qml/plasmoid/declarativeappletscript.cpp +++ b/src/scriptengines/qml/plasmoid/declarativeappletscript.cpp @@ -53,6 +53,10 @@ DeclarativeAppletScript::DeclarativeAppletScript(QObject *parent, const QVariant m_interface(0), m_args(args) { + // Chop off list entry added by KService::createInstance() before we + // hand this to the applet via externalData() later. + m_args.removeLast(); + //qmlRegisterType(); //FIXME: use this if/when will be possible to have properties of attached items subclasses on the left hand of expressions /*qmlRegisterUncreatableType("org.kde.plasma.plasmoid", 2, 0, "Plasmoid",