From 6a9b6a302ca350c591bf649554f756926bd1b515 Mon Sep 17 00:00:00 2001 From: "Aaron J. Seigo" Date: Fri, 3 Sep 2010 21:00:25 +0000 Subject: [PATCH] save fetching the env multiple times when we already have it svn path=/trunk/KDE/kdebase/runtime/; revision=1171426 --- scriptengines/javascript/common/scriptenv.cpp | 24 +++-- .../plasmoid/simplejavascriptapplet.cpp | 90 ++++++++++++------- .../plasmoid/simplejavascriptapplet.h | 4 +- 3 files changed, 80 insertions(+), 38 deletions(-) diff --git a/scriptengines/javascript/common/scriptenv.cpp b/scriptengines/javascript/common/scriptenv.cpp index 0b88c7e39..4d096bcd7 100644 --- a/scriptengines/javascript/common/scriptenv.cpp +++ b/scriptengines/javascript/common/scriptenv.cpp @@ -45,6 +45,7 @@ #include "javascriptaddonpackagestructure.h" Q_DECLARE_METATYPE(ScriptEnv*) +Q_DECLARE_METATYPE(Plasma::Package) ScriptEnv::ScriptEnv(QObject *parent, QScriptEngine *engine) : QObject(parent), @@ -233,7 +234,7 @@ QScriptValue ScriptEnv::getUrl(QScriptContext *context, QScriptEngine *engine) ScriptEnv *env = ScriptEnv::findScriptEnv(engine); if (!env) { - kDebug() << "findScriptEnv failed"; + //kDebug() << "findScriptEnv failed"; return engine->undefinedValue(); } @@ -291,7 +292,10 @@ bool ScriptEnv::importBuiltinExtension(const QString &extension, QScriptValue &o bool ScriptEnv::importExtensions(const KPluginInfo &info, QScriptValue &obj, Authorization &auth) { QStringList requiredExtensions = info.service()->property("X-Plasma-RequiredExtensions", QVariant::StringList).toStringList(); - kDebug() << "required extensions are" << requiredExtensions; + if (!requiredExtensions.isEmpty()) { + kDebug() << "required extensions are" << requiredExtensions; + } + foreach (const QString &ext, requiredExtensions) { QString extension = ext.toLower(); if (m_extensions.contains(extension)) { @@ -316,7 +320,10 @@ bool ScriptEnv::importExtensions(const KPluginInfo &info, QScriptValue &obj, Aut } QStringList optionalExtensions = info.service()->property("X-Plasma-OptionalExtensions", QVariant::StringList).toStringList(); - kDebug() << "optional extensions are" << optionalExtensions; + if (!optionalExtensions.isEmpty()) { + kDebug() << "optional extensions are" << optionalExtensions; + } + foreach (const QString &ext, optionalExtensions) { QString extension = ext.toLower(); @@ -432,6 +439,11 @@ QScriptValue ScriptEnv::loadAddon(QScriptContext *context, QScriptEngine *engine QScriptContext *innerContext = engine->pushContext(); innerContext->activationObject().setProperty("registerAddon", engine->newFunction(ScriptEnv::registerAddon)); + QScriptValue v = engine->newVariant(QVariant::fromValue(package)); + innerContext->activationObject().setProperty("__plasma_addon_package", v, + QScriptValue::ReadOnly | + QScriptValue::Undeletable | + QScriptValue::SkipInEnumeration); engine->evaluate(code, file.fileName()); engine->popContext(); @@ -458,9 +470,11 @@ QScriptValue ScriptEnv::registerAddon(QScriptContext *context, QScriptEngine *en func.setProperty("test", "bar"); */ QScriptValue obj = func.construct(); + obj.setProperty("__plasma_addon_package", + context->activationObject().property("__plasma_addon_package"), + QScriptValue::ReadOnly|QScriptValue::Undeletable| + QScriptValue::SkipInEnumeration); /* - obj.setProperty("__plasma_addon_filepath", "/fake/path/", - QScriptValue::ReadOnly|QScriptValue::Undeletable|QScriptValue::SkipInEnumeration); obj.setProperty("test", "bar"); obj.setProperty("addonFilePath", engine->newFunction(ScriptEnv::addonFilePath)); */ diff --git a/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp b/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp index 841c960f2..ec9c7bff4 100644 --- a/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp +++ b/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp @@ -149,28 +149,37 @@ void SimpleJavaScriptApplet::reportError(ScriptEnv *env, bool fatal) void SimpleJavaScriptApplet::configChanged() { ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); - if (!env || !env->callEventListeners("configchanged")) { - callPlasmoidFunction("configChanged"); + if (!env || !env->callEventListeners("configchangd")) { + callPlasmoidFunction("configChanged", QScriptValueList(), env); } } void SimpleJavaScriptApplet::dataUpdated(const QString &name, const DataEngine::Data &data) { - QScriptValueList args; - args << m_engine->toScriptValue(name) << m_engine->toScriptValue(data); ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); - if (!env || !env->callEventListeners("dataUpdated")) { - callPlasmoidFunction("dataUpdated", args); + if (!env) { + return; + } + + if (!env->callEventListeners("dataUpdated")) { + QScriptValueList args; + args << m_engine->toScriptValue(name) << m_engine->toScriptValue(data); + callPlasmoidFunction("dataUpdated", args, env); } } void SimpleJavaScriptApplet::extenderItemRestored(Plasma::ExtenderItem* item) { + ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); + if (!env) { + return; + } + QScriptValueList args; args << m_engine->newQObject(item, QScriptEngine::AutoOwnership, QScriptEngine::PreferExistingWrapperObject); - ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); - if (!env || !env->callEventListeners("initExtenderItem")) { - callPlasmoidFunction("initExtenderItem", args); + + if (!env->callEventListeners("initExtenderItem")) { + callPlasmoidFunction("initExtenderItem", args, env); } } @@ -178,39 +187,52 @@ void SimpleJavaScriptApplet::activate() { ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); if (!env || !env->callEventListeners("activate")) { - callPlasmoidFunction("activate"); + callPlasmoidFunction("activate", QScriptValueList(), env); } } void SimpleJavaScriptApplet::popupEvent(bool popped) { + ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); + if (!env) { + return; + } + QScriptValueList args; args << popped; - ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); - if (!env || !env->callEventListeners("popupEvent", args)) { - callPlasmoidFunction("popupEvent", args); + + if (!env->callEventListeners("popupEvent", args)) { + callPlasmoidFunction("popupEvent", args, env); } } void SimpleJavaScriptApplet::executeAction(const QString &name) { - const QString func("action_" + name); ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); - if (!env || !env->callEventListeners(func)) { - callPlasmoidFunction(func); + if (!env) { + return; + } + + const QString func("action_" + name); + if (!env->callEventListeners(func)) { + callPlasmoidFunction(func, QScriptValueList(), env); } } void SimpleJavaScriptApplet::paintInterface(QPainter *p, const QStyleOptionGraphicsItem *option, const QRect &contentsRect) { + ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); + if (!env) { + return; + } + QScriptValueList args; args << m_engine->toScriptValue(p); args << m_engine->toScriptValue(const_cast(option)); args << m_engine->toScriptValue(QRectF(contentsRect)); - ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); - if (!env || !env->callEventListeners("paintInterface")) { - callPlasmoidFunction("paintInterface", args); + if (!env->callEventListeners("paintInterface")) { + callPlasmoidFunction("paintInterface", args, env); } } @@ -219,11 +241,14 @@ QList SimpleJavaScriptApplet::contextualActions() return m_interface->contextualActions(); } -void SimpleJavaScriptApplet::callPlasmoidFunction(const QString &functionName, const QScriptValueList &args) +void SimpleJavaScriptApplet::callPlasmoidFunction(const QString &functionName, const QScriptValueList &args, ScriptEnv *env) { - QScriptValue func = m_self.property(functionName); - ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); + if (!env) { + env = ScriptEnv::findScriptEnv(m_engine); + } + if (env) { + QScriptValue func = m_self.property(functionName); env->callFunction(func, args, m_self); } } @@ -247,34 +272,37 @@ void SimpleJavaScriptApplet::removeEventListener(const QString &event, const QSc void SimpleJavaScriptApplet::constraintsEvent(Plasma::Constraints constraints) { ScriptEnv *env = ScriptEnv::findScriptEnv(m_engine); + if (!env) { + return; + } if (constraints & Plasma::FormFactorConstraint) { - if (!env || !env->callEventListeners("formFactorChanged")) { - callPlasmoidFunction("formFactorChanged"); + if (!env->callEventListeners("formFactorChanged")) { + callPlasmoidFunction("formFactorChanged", QScriptValueList(), env); } } if (constraints & Plasma::LocationConstraint) { - if (!env || !env->callEventListeners("locationChanged")) { - callPlasmoidFunction("locationChanged"); + if (!env->callEventListeners("locationChanged")) { + callPlasmoidFunction("locationChanged", QScriptValueList(), env); } } if (constraints & Plasma::ContextConstraint) { - if (!env || !env->callEventListeners("currentActivityChanged")) { - callPlasmoidFunction("currentActivityChanged"); + if (!env->callEventListeners("currentActivityChanged")) { + callPlasmoidFunction("currentActivityChanged", QScriptValueList(), env); } } if (constraints & Plasma::SizeConstraint) { if (!env || !env->callEventListeners("sizeChanged")) { - callPlasmoidFunction("sizeChanged"); + callPlasmoidFunction("sizeChanged", QScriptValueList(), env); } } if (constraints & Plasma::ImmutableConstraint) { - if (!env || !env->callEventListeners("immutabilityChanged")) { - callPlasmoidFunction("immutabilityChanged"); + if (!env->callEventListeners("immutabilityChanged")) { + callPlasmoidFunction("immutabilityChanged", QScriptValueList(), env); } } } diff --git a/scriptengines/javascript/plasmoid/simplejavascriptapplet.h b/scriptengines/javascript/plasmoid/simplejavascriptapplet.h index 4e6835e03..bb97607b8 100644 --- a/scriptengines/javascript/plasmoid/simplejavascriptapplet.h +++ b/scriptengines/javascript/plasmoid/simplejavascriptapplet.h @@ -61,7 +61,7 @@ public: bool eventFilter(QObject *watched, QEvent *event); public Q_SLOTS: - void dataUpdated( const QString &name, const Plasma::DataEngine::Data &data ); + void dataUpdated(const QString &name, const Plasma::DataEngine::Data &data); void configChanged(); void executeAction(const QString &name); void collectGarbage(); @@ -76,7 +76,7 @@ private: bool importExtensions(); bool importBuiltinExtension(const QString &extension); void setupObjects(); - void callPlasmoidFunction(const QString &functionName, const QScriptValueList &args = QScriptValueList()); + void callPlasmoidFunction(const QString &functionName, const QScriptValueList &args = QScriptValueList(), ScriptEnv *env = 0); QScriptValue createKeyEventObject(QKeyEvent *event); QScriptValue createHoverEventObject(QGraphicsSceneHoverEvent *event); QScriptValue createMouseEventObject(QGraphicsSceneMouseEvent *event);