Marco Martin has uploaded a new change for review. https://gerrit.vesnicky.cesnet.cz/r/374
Change subject: support for C++ applets ...................................................................... support for C++ applets make possible for an applet to be implemented in c++ but still have the qml package with the usual api, this was supposed to be supported from the beginning. if a c++ applet has been loaded, make available the property plasmoid.nativeInterface to the qml part, exposing the subclasses Applet instance with all eventual extra propertiels/slots. if no c++ plugin is present, appletInterface will be dummy/not available this (besides limiting a bit the qml import rabbit procreation) makes available some things not available to normal private imports: * access to applet config() to save more complex things compared to what kconfigxt allows or save/load stuff from the c++ part * access to containment()/corona(), may be useful for containment implementations * easier port for old very big applets such as comics/weather Change-Id: I65117660043de3a60ad58c77b086f686683d4d8c --- M src/plasma/pluginloader.cpp M src/scriptengines/qml/plasmoid/appletinterface.cpp M src/scriptengines/qml/plasmoid/appletinterface.h 3 files changed, 26 insertions(+), 3 deletions(-) git pull ssh://gerrit.vesnicky.cesnet.cz:29418/plasma-framework refs/changes/74/374/1 diff --git a/src/plasma/pluginloader.cpp b/src/plasma/pluginloader.cpp index 48cd46c..7ecdd15 100644 --- a/src/plasma/pluginloader.cpp +++ b/src/plasma/pluginloader.cpp @@ -201,8 +201,8 @@ QVariantList allArgs; allArgs << offer->storageId() << appletId << args; - - if (!offer->property("X-Plasma-API").toString().isEmpty()) { + if (!offer->property("X-Plasma-API").toString().isEmpty() && + offer->property("Library").toString().isEmpty()) { #ifndef NDEBUG // qDebug() << "we have a script using the" // << offer->property("X-Plasma-API").toString() << "API"; diff --git a/src/scriptengines/qml/plasmoid/appletinterface.cpp b/src/scriptengines/qml/plasmoid/appletinterface.cpp index 0ec2c34..ab8056b 100644 --- a/src/scriptengines/qml/plasmoid/appletinterface.cpp +++ b/src/scriptengines/qml/plasmoid/appletinterface.cpp @@ -63,6 +63,7 @@ m_busy(false), m_hideOnDeactivate(true), m_oldKeyboardShortcut(0), + m_dummyNativeInterface(0), m_positionBeforeRemoval(QPointF(-1, -1)) { qmlRegisterType<QAction>(); @@ -118,7 +119,8 @@ m_appletScriptEngine(0), m_backgroundHints(Plasma::Types::StandardBackground), m_busy(false), - m_hideOnDeactivate(true) + m_hideOnDeactivate(true), + m_dummyNativeInterface(0) { qmlRegisterType<QAction>(); @@ -585,6 +587,19 @@ applet()->setGlobalShortcut(sequence); } +QObject *AppletInterface::nativeInterface() +{ + if (applet()->metaObject()->className() != "Plasma::Applet") { + return applet(); + } else { + //This being CONSTANT is guaranteed to be called only once + if (!m_dummyNativeInterface) { + m_dummyNativeInterface = new QObject(this); + } + return m_dummyNativeInterface; + } +} + QString AppletInterface::downloadPath(const QString &file) { const QString downloadDir = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + "/Plasma/" + applet()->pluginInfo().pluginName() + '/'; diff --git a/src/scriptengines/qml/plasmoid/appletinterface.h b/src/scriptengines/qml/plasmoid/appletinterface.h index 457f5df..32a72ee 100644 --- a/src/scriptengines/qml/plasmoid/appletinterface.h +++ b/src/scriptengines/qml/plasmoid/appletinterface.h @@ -192,6 +192,11 @@ */ Q_PROPERTY(QKeySequence globalShortcut READ globalShortcut WRITE setGlobalShortcut NOTIFY globalShortcutChanged) + /** + * An interface to the native C++ plasmoid, if implemented + */ + Q_PROPERTY(QObject *nativeInterface READ nativeInterface CONSTANT) + public: AppletInterface(DeclarativeAppletScript *script, const QVariantList &args = QVariantList(), QQuickItem *parent = 0); AppletInterface(Plasma::Applet *applet, const QVariantList &args = QVariantList(), QQuickItem *parent = 0); @@ -318,6 +323,8 @@ QKeySequence globalShortcut() const; void setGlobalShortcut(const QKeySequence &keySequence); + QObject *nativeInterface(); + Q_SIGNALS: /** * somebody else, usually the containment sent some data to the applet @@ -390,6 +397,7 @@ bool m_hideOnDeactivate : 1; //this is used to build an emacs style shortcut int m_oldKeyboardShortcut; + QObject *m_dummyNativeInterface; friend class ContainmentInterface; //This is used by ContainmentInterface -- To view, visit https://gerrit.vesnicky.cesnet.cz/r/374 To unsubscribe, visit https://gerrit.vesnicky.cesnet.cz/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I65117660043de3a60ad58c77b086f686683d4d8c Gerrit-PatchSet: 1 Gerrit-Project: plasma-framework Gerrit-Branch: master Gerrit-Owner: Marco Martin <notm...@gmail.com> Gerrit-Reviewer: Aaron J. Seigo <ase...@kde.org> _______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel