summaryrefslogtreecommitdiff
path: root/core/launcher
authorzecke <zecke>2003-08-28 14:32:22 (UTC)
committer zecke <zecke>2003-08-28 14:32:22 (UTC)
commitf3c6caca7e96488ad9e1873e9c853f11b17a944e (patch) (unidiff)
tree4a83c306c573d5185f20c0f96f89aeffa24e2e1d /core/launcher
parenta069f32d9339fad02af60ac8aa991c3dee011039 (diff)
downloadopie-f3c6caca7e96488ad9e1873e9c853f11b17a944e.zip
opie-f3c6caca7e96488ad9e1873e9c853f11b17a944e.tar.gz
opie-f3c6caca7e96488ad9e1873e9c853f11b17a944e.tar.bz2
Make conpile with Opie
If QuickApps exec fails don't try to start it anytime soon If application fails to start and /tmp/qcop-msg- is present don't try to restart
Diffstat (limited to 'core/launcher') (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/applauncher.cpp69
1 files changed, 39 insertions, 30 deletions
diff --git a/core/launcher/applauncher.cpp b/core/launcher/applauncher.cpp
index 50c1b71..d6f93da 100644
--- a/core/launcher/applauncher.cpp
+++ b/core/launcher/applauncher.cpp
@@ -28,5 +28,5 @@
28#define QTOPIA_PROGRAM_MONITOR 28#define QTOPIA_PROGRAM_MONITOR
29#endif 29#endif
30#include <qtopia/qpeglobal.h> 30#include <qtopia/global.h>
31 31
32#ifndef Q_OS_WIN32 32#ifndef Q_OS_WIN32
@@ -62,4 +62,5 @@
62#include "applauncher.h" 62#include "applauncher.h"
63#include "documentlist.h" 63#include "documentlist.h"
64#include "launcherglobal.h"
64 65
65const int AppLauncher::RAISE_TIMEOUT_MS = 5000; 66const int AppLauncher::RAISE_TIMEOUT_MS = 5000;
@@ -76,5 +77,5 @@ public:
76 AppStoppedEvent(int pid, int status) 77 AppStoppedEvent(int pid, int status)
77 : QCustomEvent( appStopEventID ), mPid(pid), mStatus(status) { } 78 : QCustomEvent( appStopEventID ), mPid(pid), mStatus(status) { }
78 79
79 int pid() { return mPid; } 80 int pid() { return mPid; }
80 int status() { return mStatus; } 81 int status() { return mStatus; }
@@ -97,5 +98,5 @@ AppLauncher::AppLauncher(QObject *parent, const char *name)
97 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), 98 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
98 this, SLOT(received(const QCString&, const QByteArray&)) ); 99 this, SLOT(received(const QCString&, const QByteArray&)) );
99 100
100#ifndef Q_OS_WIN32 101#ifndef Q_OS_WIN32
101 signal(SIGCHLD, signalHandler); 102 signal(SIGCHLD, signalHandler);
@@ -108,5 +109,5 @@ AppLauncher::AppLauncher(QObject *parent, const char *name)
108 tmp = tmp.mid(++pos); 109 tmp = tmp.mid(++pos);
109 runningApps[::getpid()] = tmp; 110 runningApps[::getpid()] = tmp;
110 111
111 appLauncherPtr = this; 112 appLauncherPtr = this;
112 113
@@ -129,5 +130,5 @@ AppLauncher::~AppLauncher()
129/* We use the QCopChannel of the app as an indicator of when it has been launched 130/* We use the QCopChannel of the app as an indicator of when it has been launched
130 so that we can disable the busy indicators */ 131 so that we can disable the busy indicators */
131void AppLauncher::newQcopChannel(const QString& channelName) 132void AppLauncher::newQcopChannel(const QString& channelName)
132{ 133{
133// qDebug("channel %s added", channelName.data() ); 134// qDebug("channel %s added", channelName.data() );
@@ -152,5 +153,5 @@ void AppLauncher::newQcopChannel(const QString& channelName)
152} 153}
153 154
154void AppLauncher::removedQcopChannel(const QString& channelName) 155void AppLauncher::removedQcopChannel(const QString& channelName)
155{ 156{
156 if (channelName.startsWith("QPE/Application/")) { 157 if (channelName.startsWith("QPE/Application/")) {
@@ -260,5 +261,5 @@ bool AppLauncher::event(QEvent *e)
260 return TRUE; 261 return TRUE;
261 } 262 }
262 263
263 return QObject::event(e); 264 return QObject::event(e);
264} 265}
@@ -283,9 +284,9 @@ void AppLauncher::timerEvent( QTimerEvent *e )
283 appKillerBox = new QMessageBox(tr("Application Problem"), 284 appKillerBox = new QMessageBox(tr("Application Problem"),
284 tr("<p>%1 is not responding.</p>").arg(appKillerName) + 285 tr("<p>%1 is not responding.</p>").arg(appKillerName) +
285 tr("<p>Would you like to force the application to exit?</p>"), 286 tr("<p>Would you like to force the application to exit?</p>"),
286 QMessageBox::Warning, QMessageBox::Yes, 287 QMessageBox::Warning, QMessageBox::Yes,
287 QMessageBox::No | QMessageBox::Default, 288 QMessageBox::No | QMessageBox::Default,
288 QMessageBox::NoButton); 289 QMessageBox::NoButton);
289 if (appKillerBox->exec() == QMessageBox::Yes) { 290 if (appKillerBox->exec() == QMessageBox::Yes) {
290 // qDebug("Killing the app!!! Bwuhahahaha!"); 291 // qDebug("Killing the app!!! Bwuhahahaha!");
291 int pid = pidForName(appKillerName); 292 int pid = pidForName(appKillerName);
@@ -303,9 +304,9 @@ void AppLauncher::timerEvent( QTimerEvent *e )
303} 304}
304 305
305#ifndef Q_OS_WIN32 306#ifndef Q_OS_WIN32
306void AppLauncher::sigStopped(int sigPid, int sigStatus) 307void AppLauncher::sigStopped(int sigPid, int sigStatus)
307{ 308{
308 int exitStatus = 0; 309 int exitStatus = 0;
309 310
310 bool crashed = WIFSIGNALED(sigStatus); 311 bool crashed = WIFSIGNALED(sigStatus);
311 if ( !crashed ) { 312 if ( !crashed ) {
@@ -365,10 +366,10 @@ void AppLauncher::sigStopped(int sigPid, int sigStatus)
365 } 366 }
366 367
367 // clean up 368 // clean up
368 if ( exitStatus ) { 369 if ( exitStatus ) {
369 QCopEnvelope e("QPE/System", "notBusy(QString)"); 370 QCopEnvelope e("QPE/System", "notBusy(QString)");
370 e << app->exec(); 371 e << app->exec();
371 } 372 }
372/* 373/*
373 // debug info 374 // debug info
374 for (it = runningApps.begin(); it != runningApps.end(); ++it) { 375 for (it = runningApps.begin(); it != runningApps.end(); ++it) {
@@ -397,5 +398,5 @@ void AppLauncher::sigStopped(int sigPid, int sigStatus)
397 if ( preloadDisabled ) 398 if ( preloadDisabled )
398 sig += tr("<qt><p>Fast loading has been disabled for this application. Tap and hold the application icon to reenable it.</qt>"); 399 sig += tr("<qt><p>Fast loading has been disabled for this application. Tap and hold the application icon to reenable it.</qt>");
399 400
400 QString str = tr("<qt><b>%1</b> was terminated due to signal code %2</qt>").arg( app->name() ).arg( sig ); 401 QString str = tr("<qt><b>%1</b> was terminated due to signal code %2</qt>").arg( app->name() ).arg( sig );
401 QMessageBox::information(0, tr("Application terminated"), str ); 402 QMessageBox::information(0, tr("Application terminated"), str );
@@ -404,8 +405,9 @@ void AppLauncher::sigStopped(int sigPid, int sigStatus)
404 QMessageBox::information(0, tr("Application not found"), tr("<qt>Could not locate application <b>%1</b></qt>").arg( app->exec() ) ); 405 QMessageBox::information(0, tr("Application not found"), tr("<qt>Could not locate application <b>%1</b></qt>").arg( app->exec() ) );
405 } else { 406 } else {
406 QFileInfo fi(Global::tempDir() + "qcop-msg-" + appName); 407 QFileInfo fi(Opie::Global::tempDir() + "qcop-msg-" + appName);
407 if ( fi.exists() && fi.size() ) { 408 if ( fi.exists() && fi.size() ) {
408 emit terminated(sigPid, appName); 409 emit terminated(sigPid, appName);
409 execute( appName, QString::null ); 410 qWarning("Re executing obmitted for %s", appName.latin1() );
411 // execute( appName, QString::null );
410 return; 412 return;
411 } 413 }
@@ -414,5 +416,5 @@ void AppLauncher::sigStopped(int sigPid, int sigStatus)
414 416
415#endif 417#endif
416 418
417 emit terminated(sigPid, appName); 419 emit terminated(sigPid, appName);
418} 420}
@@ -445,7 +447,7 @@ bool AppLauncher::isRunning(const QString &app)
445bool AppLauncher::executeBuiltin(const QString &c, const QString &document) 447bool AppLauncher::executeBuiltin(const QString &c, const QString &document)
446{ 448{
447 Global::Command* builtin = Global::builtinCommands(); 449 Global::Command* builtin = Opie::Global::builtinCommands();
448 QGuardedPtr<QWidget> *running = Global::builtinRunning(); 450 QGuardedPtr<QWidget> *running = Opie::Global::builtinRunning();
449 451
450 // Attempt to execute the app using a builtin class for the app 452 // Attempt to execute the app using a builtin class for the app
451 if (builtin) { 453 if (builtin) {
@@ -484,4 +486,5 @@ bool AppLauncher::executeBuiltin(const QString &c, const QString &document)
484bool AppLauncher::execute(const QString &c, const QString &docParam, bool noRaise) 486bool AppLauncher::execute(const QString &c, const QString &docParam, bool noRaise)
485{ 487{
488 qWarning("AppLauncher::execute");
486 // Convert the command line in to a list of arguments 489 // Convert the command line in to a list of arguments
487 QStringList list = QStringList::split(QRegExp(" *"),c); 490 QStringList list = QStringList::split(QRegExp(" *"),c);
@@ -493,12 +496,12 @@ bool AppLauncher::execute(const QString &c, const QString &docParam, bool noRais
493 QCString channel = "QPE/Application/"; 496 QCString channel = "QPE/Application/";
494 channel += appName.latin1(); 497 channel += appName.latin1();
495 498
496 // Need to lock it to avoid race conditions with QPEApplication::processQCopFile 499 // Need to lock it to avoid race conditions with QPEApplication::processQCopFile
497 QFile f(Global::tempDir() + "qcop-msg-" + appName); 500 QFile f(Opie::Global::tempDir() + "qcop-msg-" + appName);
498 if ( !noRaise && f.open(IO_WriteOnly | IO_Append) ) { 501 if ( !noRaise && f.open(IO_WriteOnly | IO_Append) ) {
499#ifndef Q_OS_WIN32 502#ifndef Q_OS_WIN32
500 flock(f.handle(), LOCK_EX); 503 flock(f.handle(), LOCK_EX);
501#endif 504#endif
502 505
503 QDataStream ds(&f); 506 QDataStream ds(&f);
504 QByteArray b; 507 QByteArray b;
@@ -524,10 +527,10 @@ bool AppLauncher::execute(const QString &c, const QString &docParam, bool noRais
524 if ( QCopChannel::isRegistered(channel) ) // avoid unnecessary warnings 527 if ( QCopChannel::isRegistered(channel) ) // avoid unnecessary warnings
525 QCopChannel::send(channel,"QPEProcessQCop()"); 528 QCopChannel::send(channel,"QPEProcessQCop()");
526 529
527 return TRUE; 530 return TRUE;
528 } 531 }
529 532
530#ifdef QT_NO_QWS_MULTIPROCESS 533#ifdef QT_NO_QWS_MULTIPROCESS
531 QMessageBox::warning( 0, tr("Error"), tr("Could not find the application %1").arg(c), 534 QMessageBox::warning( 0, tr("Error"), tr("<qt>Could not find the application %1</qt>").arg(c),
532 tr("OK"), 0, 0, 0, 1 ); 535 tr("OK"), 0, 0, 0, 1 );
533#else 536#else
@@ -586,5 +589,5 @@ bool AppLauncher::execute(const QString &c, const QString &docParam, bool noRais
586 if (procInfo){ 589 if (procInfo){
587 DWORD pid = procInfo->dwProcessId; 590 DWORD pid = procInfo->dwProcessId;
588 runningApps[pid] = QString(args[0]); 591 runningApps[pid] = QString(args[0]);
589 runningAppsProc.append(proc); 592 runningAppsProc.append(proc);
590 emit launched(pid, QString(args[0])); 593 emit launched(pid, QString(args[0]));
@@ -636,4 +639,8 @@ int AppLauncher::pidForName( const QString &appName )
636void AppLauncher::createQuickLauncher() 639void AppLauncher::createQuickLauncher()
637{ 640{
641 static bool disabled = FALSE;
642 if (disabled)
643 return;
644
638 qlReady = FALSE; 645 qlReady = FALSE;
639 qlPid = ::vfork(); 646 qlPid = ::vfork();
@@ -649,4 +656,6 @@ void AppLauncher::createQuickLauncher()
649 ::execv( QPEApplication::qpeDir()+"bin/quicklauncher", args ); 656 ::execv( QPEApplication::qpeDir()+"bin/quicklauncher", args );
650 ::execvp( "quicklauncher", args ); 657 ::execvp( "quicklauncher", args );
658 delete []args;
659 disabled = TRUE;
651 _exit( -1 ); 660 _exit( -1 );
652 } else if ( qlPid == -1 ) { 661 } else if ( qlPid == -1 ) {
@@ -672,5 +681,5 @@ void AppLauncher::processExited()
672 QString appName = proc->arguments()[0]; 681 QString appName = proc->arguments()[0];
673 qDebug("Removing application %s", appName.latin1()); 682 qDebug("Removing application %s", appName.latin1());
674 runningAppsProc.remove(proc); 683 runningAppsProc.remove(proc);
675 684
676 QMap<QString,int>::Iterator hbit = waitingHeartbeat.find(appName); 685 QMap<QString,int>::Iterator hbit = waitingHeartbeat.find(appName);
@@ -700,5 +709,5 @@ void AppLauncher::processExited()
700 qDebug("Internal error application %s not listed as running", appName.latin1()); 709 qDebug("Internal error application %s not listed as running", appName.latin1());
701 } 710 }
702 711
703#endif 712#endif
704} 713}