From 603096a3188a65bec8be6aad09947c3b15c9cce0 Mon Sep 17 00:00:00 2001 From: "Aaron J. Seigo" Date: Sat, 4 Sep 2010 00:27:45 +0000 Subject: [PATCH] make addon packages work with Svg objects as well (and just about everything else that we might need in future); need to replicate this for DataEngine and Runner now. svn path=/trunk/KDE/kdebase/runtime/; revision=1171497 --- .../javascript/plasmoid/appletinterface.cpp | 21 +++++++++++++------ .../javascript/plasmoid/appletinterface.h | 1 + .../plasmoid/simplejavascriptapplet.cpp | 10 ++++----- .../plasmoid/simplejavascriptapplet.h | 2 +- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/scriptengines/javascript/plasmoid/appletinterface.cpp b/scriptengines/javascript/plasmoid/appletinterface.cpp index f6e56e090..215bc0895 100644 --- a/scriptengines/javascript/plasmoid/appletinterface.cpp +++ b/scriptengines/javascript/plasmoid/appletinterface.cpp @@ -200,16 +200,25 @@ QString AppletInterface::file(const QString &fileType) QString AppletInterface::file(const QString &fileType, const QString &filePath) { - QScriptContext *c = context(); - if (c && c->parentContext()) { - QScriptValue v = c->parentContext()->activationObject().property("__plasma_package"); - //kDebug() << "variant in parent context?" << v.isVariant() << t.restart(); + return file(fileType, filePath, context()); +} + +QString AppletInterface::file(const QString &fileType, const QString &filePath, QScriptContext *c) +{ + while (c) { + QScriptValue v = c->activationObject().property("__plasma_package"); + //kDebug() << "variant in parent context?" << v.isVariant(); if (v.isVariant()) { - return v.toVariant().value().filePath(fileType.toLocal8Bit().constData(), filePath); - //kDebug() << "path to package is" << p.path(); + const QString path = v.toVariant().value().filePath(fileType.toLocal8Bit().constData(), filePath); + if (!path.isEmpty()) { + return path; + } } + + c = c->parentContext(); } + //kDebug() << "old school attempt"; return m_appletScriptEngine->package()->filePath(fileType.toLocal8Bit().constData(), filePath); } diff --git a/scriptengines/javascript/plasmoid/appletinterface.h b/scriptengines/javascript/plasmoid/appletinterface.h index 935ab77e1..e0b78efe8 100644 --- a/scriptengines/javascript/plasmoid/appletinterface.h +++ b/scriptengines/javascript/plasmoid/appletinterface.h @@ -268,6 +268,7 @@ enum IntervalAlignment { Q_INVOKABLE QString file(const QString &fileType); Q_INVOKABLE QString file(const QString &fileType, const QString &filePath); + QString file(const QString &fileType, const QString &filePath, QScriptContext *context); Q_INVOKABLE bool include(const QString &script); diff --git a/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp b/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp index 5fd398680..cae8d99e3 100644 --- a/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp +++ b/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp @@ -698,16 +698,16 @@ QScriptValue SimpleJavaScriptApplet::loadui(QScriptContext *context, QScriptEngi return engine->newQObject(w, QScriptEngine::AutoOwnership); } -QString SimpleJavaScriptApplet::findSvg(QScriptEngine *engine, const QString &file) +QString SimpleJavaScriptApplet::findSvg(QScriptContext *context, QScriptEngine *engine, const QString &file) { AppletInterface *interface = AppletInterface::extract(engine); if (!interface) { return file; } - QString path = interface->file("images", file + ".svg"); + QString path = interface->file("images", file + ".svg", context); if (path.isEmpty()) { - path = interface->file("images", file + ".svgz"); + path = interface->file("images", file + ".svgz", context); if (path.isEmpty()) { return file; @@ -727,7 +727,7 @@ QScriptValue SimpleJavaScriptApplet::newPlasmaSvg(QScriptContext *context, QScri bool parentedToApplet = false; QGraphicsWidget *parent = extractParent(context, engine, 1, &parentedToApplet); Svg *svg = new Svg(parent); - svg->setImagePath(parentedToApplet ? findSvg(engine, filename) : filename); + svg->setImagePath(parentedToApplet ? findSvg(context, engine, filename) : filename); QScriptValue fun = engine->newQObject(svg); ScriptEnv::registerEnums(fun, *svg->metaObject()); return fun; @@ -744,7 +744,7 @@ QScriptValue SimpleJavaScriptApplet::newPlasmaFrameSvg(QScriptContext *context, bool parentedToApplet = false; QGraphicsWidget *parent = extractParent(context, engine, 1, &parentedToApplet); FrameSvg *frameSvg = new FrameSvg(parent); - frameSvg->setImagePath(parentedToApplet ? filename : findSvg(engine, filename)); + frameSvg->setImagePath(parentedToApplet ? filename : findSvg(context, engine, filename)); QScriptValue fun = engine->newQObject(frameSvg); ScriptEnv::registerEnums(fun, *frameSvg->metaObject()); diff --git a/scriptengines/javascript/plasmoid/simplejavascriptapplet.h b/scriptengines/javascript/plasmoid/simplejavascriptapplet.h index 7258fd06c..3c640a715 100644 --- a/scriptengines/javascript/plasmoid/simplejavascriptapplet.h +++ b/scriptengines/javascript/plasmoid/simplejavascriptapplet.h @@ -80,7 +80,7 @@ private: QScriptValue createWheelEventObject(QGraphicsSceneWheelEvent *event); static void populateAnimationsHash(); - static QString findSvg(QScriptEngine *engine, const QString &file); + static QString findSvg(QScriptContext *context, QScriptEngine *engine, const QString &file); static QScriptValue animation(QScriptContext *context, QScriptEngine *engine); static QScriptValue animationGroup(QScriptContext *context, QScriptEngine *engine); static QScriptValue parallelAnimationGroup(QScriptContext *context, QScriptEngine *engine);