diff --git a/plasmoidviewer/main.cpp b/plasmoidviewer/main.cpp --- a/plasmoidviewer/main.cpp +++ b/plasmoidviewer/main.cpp @@ -82,6 +82,7 @@ i18n("The name of the theme which the shell will use"), QStringLiteral("themeName"))); + parser.addPositionalArgument(QStringLiteral("externalData"), i18n("Data that should be passed to the applet as 'externalData' event")); parser.addHelpOption(); parser.addVersionOption(); @@ -135,6 +136,11 @@ QPixmapCache::setCacheLimit(parser.value("pixmapcache").toInt()); } + // emit externalData event so we you can launch e.g. an icon applet already with a proper URL + if (parser.positionalArguments().count() == 1) { + v->emitExternalData(parser.positionalArguments().constFirst()); + } + v->show(); return app.exec(); diff --git a/plasmoidviewer/view.h b/plasmoidviewer/view.h --- a/plasmoidviewer/view.h +++ b/plasmoidviewer/view.h @@ -36,6 +36,7 @@ void addContainment(const QString &containment); void addFormFactor(const QString &formFactor = QStringLiteral("planar")); void addLocation(const QString &location = QStringLiteral("floating")); + void emitExternalData(const QString &data); bool konsoleVisible(); Q_INVOKABLE void changeFormFactor(int formFactor); diff --git a/plasmoidviewer/view.cpp b/plasmoidviewer/view.cpp --- a/plasmoidviewer/view.cpp +++ b/plasmoidviewer/view.cpp @@ -223,6 +223,23 @@ setLocation(locationType); } +void View::emitExternalData(const QString &data) +{ + if (data.isEmpty()) { + return; + } + + Plasma::Applet *applet = containment()->applets().constFirst(); + + QObject *graphicsObject = qobject_cast(applet->property("_plasma_graphicObject").value()); + if (!graphicsObject) { + return; + } + + QMetaObject::invokeMethod(graphicsObject, "externalData", Q_ARG(QString, QString()), + Q_ARG(QVariant, data)); +} + bool View::konsoleVisible() { return m_konsoleVisible;