diff --git a/src/plasma/applet.h b/src/plasma/applet.h index c91cb6e3b..7fce564f4 100644 --- a/src/plasma/applet.h +++ b/src/plasma/applet.h @@ -415,6 +415,21 @@ class PLASMA_EXPORT Applet : public QObject public Q_SLOTS: //BOOKKEEPING + /** + * Call this method when the applet fails to launch properly. An + * optional reason can be provided. + * + * Not that all children items will be deleted when this method is + * called. If you have pointers to these items, you will need to + * reset them after calling this method. + * + * @param failed true when the applet failed, false when it succeeded + * @param reason an optional reason to show the user why the applet + * failed to launch + * @since 5.0 + **/ + void setLaunchErrorMessage(const QString &reason = QString()); + /** * Sets the immutability type for this applet (not immutable, * user immutable or system immutable) @@ -488,22 +503,6 @@ class PLASMA_EXPORT Applet : public QObject */ Applet(QObject *parent, const QVariantList &args); -//BOOKEEPING - /** - * Call this method when the applet fails to launch properly. An - * optional reason can be provided. - * - * Not that all children items will be deleted when this method is - * called. If you have pointers to these items, you will need to - * reset them after calling this method. - * - * @param failed true when the applet failed, false when it succeeded - * @param reason an optional reason to show the user why the applet - * failed to launch - * @since 5.0 - **/ - void setLaunchErrorMessage(const QString &reason = QString()); - //CONFIGURATION /** * When called, the Applet should write any information needed as part diff --git a/src/scriptengines/qml/plasmoid/appletinterface.cpp b/src/scriptengines/qml/plasmoid/appletinterface.cpp index e105f8a0a..3d83dfc02 100644 --- a/src/scriptengines/qml/plasmoid/appletinterface.cpp +++ b/src/scriptengines/qml/plasmoid/appletinterface.cpp @@ -53,8 +53,9 @@ Q_DECLARE_METATYPE(AppletInterface*) AppletInterface::AppletInterface(DeclarativeAppletScript *script, QQuickItem *parent) - : AppletLoader(script, parent), + : AppletLoader(script->applet(), parent), m_actionSignals(0), + m_appletScriptEngine(script), m_backgroundHints(Plasma::Types::StandardBackground), m_busy(false), m_hideOnDeactivate(true) @@ -82,14 +83,17 @@ AppletInterface::AppletInterface(DeclarativeAppletScript *script, QQuickItem *pa connect(applet()->containment(), &Plasma::Containment::screenChanged, this, &ContainmentInterface::screenChanged); } - - setProperty("_plasma_applet", QVariant::fromValue(applet())); } AppletInterface::~AppletInterface() { } +DeclarativeAppletScript *AppletInterface::appletScript() const +{ + return m_appletScriptEngine; +} + void AppletInterface::init() { if (qmlObject()->rootObject() && m_configuration) { diff --git a/src/scriptengines/qml/plasmoid/appletinterface.h b/src/scriptengines/qml/plasmoid/appletinterface.h index 688e07581..bdac08362 100644 --- a/src/scriptengines/qml/plasmoid/appletinterface.h +++ b/src/scriptengines/qml/plasmoid/appletinterface.h @@ -154,12 +154,12 @@ public: //API not intended for the QML part + DeclarativeAppletScript *appletScript() const; + QList contextualActions() const; void executeAction(const QString &name); - Plasma::Applet *applet() const { return appletScript()->applet(); } - //QML API------------------------------------------------------------------- /** @@ -302,6 +302,7 @@ private: KDeclarative::ConfigPropertyMap *m_configuration; + DeclarativeAppletScript *m_appletScriptEngine; //UI-specific members ------------------ diff --git a/src/scriptengines/qml/plasmoid/appletloader.cpp b/src/scriptengines/qml/plasmoid/appletloader.cpp index 9ebe7cbe0..921e9d99a 100644 --- a/src/scriptengines/qml/plasmoid/appletloader.cpp +++ b/src/scriptengines/qml/plasmoid/appletloader.cpp @@ -32,7 +32,6 @@ #include #include #include -#include #include #include @@ -40,16 +39,16 @@ QHash AppletLoader::s_rootObjects = QHash(); -AppletLoader::AppletLoader(DeclarativeAppletScript *script, QQuickItem *parent) +AppletLoader::AppletLoader(Plasma::Applet *applet, QQuickItem *parent) : QQuickItem(parent), m_switchWidth(-1), m_switchHeight(-1), - m_appletScriptEngine(script), + m_applet(applet), m_expanded(false) { - m_appletPackage = m_appletScriptEngine->package(); - if (m_appletScriptEngine->applet() && m_appletScriptEngine->applet()->containment() && m_appletScriptEngine->applet()->containment()->corona()) { - m_coronaPackage = m_appletScriptEngine->applet()->containment()->corona()->package(); + m_appletPackage = m_applet->package(); + if (m_applet && m_applet->containment() && m_applet->containment()->corona()) { + m_coronaPackage = m_applet->containment()->corona()->package(); } m_compactRepresentationCheckTimer.setSingleShot(true); @@ -62,7 +61,7 @@ AppletLoader::AppletLoader(DeclarativeAppletScript *script, QQuickItem *parent) m_fullRepresentationResizeTimer.setInterval(250); connect (&m_fullRepresentationResizeTimer, &QTimer::timeout, [=]() { - KConfigGroup cg = m_appletScriptEngine->applet()->config(); + KConfigGroup cg = m_applet->config(); cg = KConfigGroup(&cg, "PopupApplet"); cg.writeEntry("DialogWidth", m_fullRepresentationItem.data()->property("width").toInt()); cg.writeEntry("DialogHeight", m_fullRepresentationItem.data()->property("height").toInt()); @@ -73,6 +72,10 @@ AppletLoader::AppletLoader(DeclarativeAppletScript *script, QQuickItem *parent) m_qmlObject = new KDeclarative::QmlObject(this); m_qmlObject->setInitializationDelayed(true); + + // set the graphicObject dynamic property on applet + m_applet->setProperty("graphicObject", QVariant::fromValue(this)); + setProperty("_plasma_applet", QVariant::fromValue(applet)); } AppletLoader::~AppletLoader() @@ -85,6 +88,11 @@ AppletLoader::~AppletLoader() s_rootObjects.remove(m_qmlObject->engine()); } +Plasma::Applet *AppletLoader::applet() const +{ + return m_applet; +} + void AppletLoader::init() { if (s_rootObjects.contains(this)) { @@ -93,16 +101,16 @@ void AppletLoader::init() s_rootObjects[m_qmlObject->engine()] = this; - Q_ASSERT(m_appletScriptEngine); + Q_ASSERT(m_applet); //Initialize the main QML file QQmlEngine *engine = m_qmlObject->engine(); - PackageUrlInterceptor *interceptor = new PackageUrlInterceptor(engine, appletScript()->package()); + PackageUrlInterceptor *interceptor = new PackageUrlInterceptor(engine, m_applet->package()); interceptor->addAllowedPath(m_coronaPackage.path()); engine->setUrlInterceptor(interceptor); - m_qmlObject->setSource(QUrl::fromLocalFile(m_appletScriptEngine->mainScript())); + m_qmlObject->setSource(QUrl::fromLocalFile(m_applet->package().filePath("mainscript"))); if (!engine || !engine->rootContext() || !engine->rootContext()->isValid() || m_qmlObject->mainComponent()->isError()) { QString reason; @@ -122,7 +130,7 @@ void AppletLoader::init() m_qmlObject->rootObject()->setProperty("reason", reason); } - appletScript()->setLaunchErrorMessage(reason); + m_applet->setLaunchErrorMessage(reason); } engine->rootContext()->setContextProperty("plasmoid", this); @@ -156,11 +164,6 @@ void AppletLoader::init() } -DeclarativeAppletScript *AppletLoader::appletScript() const -{ - return m_appletScriptEngine; -} - int AppletLoader::switchWidth() const { return m_switchWidth; @@ -259,7 +262,7 @@ bool AppletLoader::isExpanded() const void AppletLoader::setExpanded(bool expanded) { - if (m_appletScriptEngine->applet()->isContainment()) { + if (m_applet->isContainment()) { expanded = true; } @@ -506,7 +509,7 @@ void AppletLoader::compactRepresentationCheck() bool full = false; - if (m_appletScriptEngine->applet()->isContainment()) { + if (m_applet->isContainment()) { full = true; } else { @@ -519,7 +522,7 @@ void AppletLoader::compactRepresentationCheck() full = m_preferredRepresentation.data() == m_fullRepresentation.data(); //Otherwise, base on FormFactor } else { - full = (m_appletScriptEngine->applet()->formFactor() != Plasma::Types::Horizontal && m_appletScriptEngine->applet()->formFactor() != Plasma::Types::Vertical); + full = (m_applet->formFactor() != Plasma::Types::Horizontal && m_applet->formFactor() != Plasma::Types::Vertical); } } diff --git a/src/scriptengines/qml/plasmoid/appletloader.h b/src/scriptengines/qml/plasmoid/appletloader.h index 440b57d24..38e6f1c3f 100644 --- a/src/scriptengines/qml/plasmoid/appletloader.h +++ b/src/scriptengines/qml/plasmoid/appletloader.h @@ -23,15 +23,15 @@ #include #include #include +#include #include -#include "declarativeappletscript.h" +#include class QQmlComponent; namespace Plasma { class Applet; - class AppletScript; } namespace KDeclarative { @@ -68,10 +68,10 @@ class AppletLoader : public QQuickItem Q_PROPERTY(bool expanded WRITE setExpanded READ isExpanded NOTIFY expandedChanged) public: - AppletLoader(DeclarativeAppletScript *script, QQuickItem *parent = 0); + AppletLoader(Plasma::Applet *applet, QQuickItem *parent = 0); ~AppletLoader(); - DeclarativeAppletScript *appletScript() const; + Plasma::Applet *applet() const; int switchWidth() const; void setSwitchWidth(int width); @@ -177,7 +177,7 @@ private: QTimer m_compactRepresentationCheckTimer; QTimer m_fullRepresentationResizeTimer; - DeclarativeAppletScript *m_appletScriptEngine; + Plasma::Applet *m_applet; KDeclarative::QmlObject *m_qmlObject; Plasma::Package m_appletPackage; diff --git a/src/scriptengines/qml/plasmoid/declarativeappletscript.cpp b/src/scriptengines/qml/plasmoid/declarativeappletscript.cpp index cef4dddda..ab9cd856d 100644 --- a/src/scriptengines/qml/plasmoid/declarativeappletscript.cpp +++ b/src/scriptengines/qml/plasmoid/declarativeappletscript.cpp @@ -93,8 +93,6 @@ bool DeclarativeAppletScript::init() } m_interface->setParent(this); - // set the graphicObject dynamic property on applet - a->setProperty("graphicObject", QVariant::fromValue(m_interface)); return true; }