void KWin::Script::slotScriptLoadedFromFile() { QFutureWatcher<QByteArray> *watcher = dynamic_cast< QFutureWatcher< QByteArray>* >(sender()); if (!watcher) { // not invoked from a QFutureWatcher return; } if (watcher->result().isNull()) { // do not load empty script deleteLater(); watcher->deleteLater(); return; } QScriptValue optionsValue = m_engine->newQObject(options, QScriptEngine::QtOwnership, QScriptEngine::ExcludeSuperClassContents | QScriptEngine::ExcludeDeleteLater); m_engine->globalObject().setProperty(QStringLiteral("options"), optionsValue, QScriptValue::Undeletable); m_engine->globalObject().setProperty(QStringLiteral("QTimer"), constructTimerClass(m_engine)); QObject::connect(m_engine, SIGNAL(signalHandlerException(QScriptValue)), this, SLOT(sigException(QScriptValue))); KWin::MetaScripting::supplyConfig(m_engine); installScriptFunctions(m_engine); QScriptValue ret = m_engine->evaluate(QString::fromUtf8(watcher->result())); if (ret.isError()) { sigException(ret); deleteLater(); } watcher->deleteLater(); setRunning(true); m_starting = false; }
bool ScriptManager::slotRunScript( const QString &name, bool silent ) { DEBUG_BLOCK ScriptItem *item = m_scripts.value( name ); const KUrl url = item->url; //load the wrapper classes item->engine = new QScriptEngine( this ); connect(item->engine, SIGNAL(signalHandlerException(QScriptValue)), SLOT(handleException(QScriptValue))); startScriptEngine( name ); QFile scriptFile( url.path() ); scriptFile.open( QIODevice::ReadOnly ); item->running = true; item->evaluating = true; if( item->info.category() == "Lyrics" ) { m_lyricsScript = name; debug() << "lyrics script started:" << name; emit lyricsScriptStarted(); } item->log << QString( "%1 Script started" ).arg( QTime::currentTime().toString() ); item->engine->setProcessEventsInterval( 100 ); item->engine->evaluate( scriptFile.readAll() ); scriptFile.close(); if ( item->evaluating ) { item->evaluating = false; if ( item->engine->hasUncaughtException() ) { QString errorString = QString( "Script Error: %1 (line: %2)" ) .arg( item->engine->uncaughtException().toString() ) .arg( item->engine->uncaughtExceptionLineNumber() ); item->log << errorString; error() << errorString; item->engine->clearExceptions(); slotStopScript( name ); if( !silent ) { debug() << "The Log For the script that is the borked: " << item->log; } return false; } if( item->info.category() == QLatin1String("Scriptable Service") ) ServiceScriptCustomize( name ); } else slotStopScript( name ); return true; }
ScriptMessageHandler::ScriptMessageHandler(ScriptPlugin *parent) { m_engine = ScriptTools::engineInstance(); QObject::connect(m_engine, SIGNAL(signalHandlerException(QScriptValue)), parent, SLOT(onException(QScriptValue))); m_engine->importExtension(QLatin1String("qt.core")); m_engine->importExtension(QLatin1String("qt.gui")); m_engine->importExtension(QLatin1String("qutim")); }
int QScriptEngine::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QObject::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: signalHandlerException((*reinterpret_cast< const QScriptValue(*)>(_a[1]))); break; case 1: d_func()->_q_objectDestroyed((*reinterpret_cast< QObject*(*)>(_a[1]))); break; default: ; } _id -= 2; } return _id; }