|
|
|
|
@ -20,6 +20,7 @@ |
|
|
|
|
#include "scriptengine.h" |
|
|
|
|
|
|
|
|
|
#include <QApplication> |
|
|
|
|
#include <QDesktopWidget> |
|
|
|
|
#include <QDir> |
|
|
|
|
#include <QDirIterator> |
|
|
|
|
#include <QFile> |
|
|
|
|
@ -96,13 +97,29 @@ QScriptValue ScriptEngine::desktopById(QScriptContext *context, QScriptEngine *e |
|
|
|
|
QScriptValue ScriptEngine::desktopsForActivity(QScriptContext *context, QScriptEngine *engine) |
|
|
|
|
{ |
|
|
|
|
if (context->argumentCount() == 0) { |
|
|
|
|
return context->throwError(i18n("containmentsByActivity requires an id")); |
|
|
|
|
return context->throwError(i18n("desktopsForActivity requires an id")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QScriptValue containments = engine->newArray(); |
|
|
|
|
int count = 0; |
|
|
|
|
|
|
|
|
|
const QString id = context->argument(0).toString(); |
|
|
|
|
|
|
|
|
|
// confirm this activity actually exists
|
|
|
|
|
KActivities::Consumer consumer; |
|
|
|
|
bool found = false; |
|
|
|
|
for (const QString &act: consumer.activities()) { |
|
|
|
|
if (act == id) { |
|
|
|
|
found = true; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!found) { |
|
|
|
|
containments.setProperty("length", 0); |
|
|
|
|
return containments; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ScriptEngine *env = envFor(engine); |
|
|
|
|
foreach (Plasma::Containment *c, env->m_corona->containments()) { |
|
|
|
|
if (c->activity() == id && !isPanel(c)) { |
|
|
|
|
@ -111,6 +128,19 @@ QScriptValue ScriptEngine::desktopsForActivity(QScriptContext *context, QScriptE |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (count == 0) { |
|
|
|
|
// we have no desktops for this activity, so lets make them now
|
|
|
|
|
// this can happen when the activity already exists but has never been activated
|
|
|
|
|
// with the current shell package and layout.js is run to set up the shell for the
|
|
|
|
|
// first time
|
|
|
|
|
const int numScreens = qApp->desktop()->numScreens(); |
|
|
|
|
for (int i = 0; i < numScreens; ++i) { |
|
|
|
|
Plasma::Containment *c = env->m_corona->createContainmentForActivity(id, i); |
|
|
|
|
containments.setProperty(count, env->wrap(c)); |
|
|
|
|
++count; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
containments.setProperty("length", count); |
|
|
|
|
return containments; |
|
|
|
|
} |
|
|
|
|
@ -147,6 +177,7 @@ QScriptValue ScriptEngine::createActivity(QScriptContext *context, QScriptEngine |
|
|
|
|
foreach (Plasma::Containment *cont, env->m_corona->containments()) { |
|
|
|
|
knownActivities.insert(cont->activity()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (const QString &act, consumer.activities()) { |
|
|
|
|
if (!knownActivities.contains(act)) { |
|
|
|
|
id = act; |
|
|
|
|
@ -201,6 +232,14 @@ QScriptValue ScriptEngine::setCurrentActivity(QScriptContext *context, QScriptEn |
|
|
|
|
return QScriptValue(task.result()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QScriptValue ScriptEngine::currentActivity(QScriptContext *context, QScriptEngine *engine) |
|
|
|
|
{ |
|
|
|
|
Q_UNUSED(context) |
|
|
|
|
|
|
|
|
|
KActivities::Consumer consumer; |
|
|
|
|
return consumer.currentActivity(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QScriptValue ScriptEngine::activities(QScriptContext *context, QScriptEngine *engine) |
|
|
|
|
{ |
|
|
|
|
Q_UNUSED(context) |
|
|
|
|
@ -722,6 +761,7 @@ void ScriptEngine::setupEngine() |
|
|
|
|
m_scriptSelf.setProperty("QRectF", constructQRectFClass(this)); |
|
|
|
|
m_scriptSelf.setProperty("createActivity", newFunction(ScriptEngine::createActivity)); |
|
|
|
|
m_scriptSelf.setProperty("setCurrentActivity", newFunction(ScriptEngine::setCurrentActivity)); |
|
|
|
|
m_scriptSelf.setProperty("currentActivity", newFunction(ScriptEngine::currentActivity)); |
|
|
|
|
m_scriptSelf.setProperty("activities", newFunction(ScriptEngine::activities)); |
|
|
|
|
m_scriptSelf.setProperty("Panel", newFunction(ScriptEngine::newPanel, newObject())); |
|
|
|
|
m_scriptSelf.setProperty("desktopsForActivity", newFunction(ScriptEngine::desktopsForActivity)); |
|
|
|
|
|