summaryrefslogtreecommitdiff
authoralwin <alwin>2004-02-21 13:24:51 (UTC)
committer alwin <alwin>2004-02-21 13:24:51 (UTC)
commit76b70b355d2c1c32c0f74e844e0654e39db2a175 (patch) (unidiff)
tree63b32f2e0e9cdcb38e5d23ccfc51b7989894297d
parent814c3c8957f25d1436ce0b63c4201bbd2f340e7f (diff)
downloadopie-76b70b355d2c1c32c0f74e844e0654e39db2a175.zip
opie-76b70b355d2c1c32c0f74e844e0654e39db2a175.tar.gz
opie-76b70b355d2c1c32c0f74e844e0654e39db2a175.tar.bz2
qcop-msg related stuff don't use tmpDirPath 'cause it isn't that good IMHO
first: content of $TEMP can change due login - so it may run into problems when searching for qcop-msg-* files second: TEMP will set by user. The user can set it to a wrong value so cop would fail. But we can mostly guarantee that /tmp will exists.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/applauncher.cpp4
-rw-r--r--core/launcher/main.cpp2
2 files changed, 3 insertions, 3 deletions
diff --git a/core/launcher/applauncher.cpp b/core/launcher/applauncher.cpp
index f161e98..a8779a5 100644
--- a/core/launcher/applauncher.cpp
+++ b/core/launcher/applauncher.cpp
@@ -310,286 +310,286 @@ void AppLauncher::sigStopped(int sigPid, int sigStatus)
310 bool crashed = WIFSIGNALED(sigStatus); 310 bool crashed = WIFSIGNALED(sigStatus);
311 if ( !crashed ) { 311 if ( !crashed ) {
312 if ( WIFEXITED(sigStatus) ) 312 if ( WIFEXITED(sigStatus) )
313 exitStatus = WEXITSTATUS(sigStatus); 313 exitStatus = WEXITSTATUS(sigStatus);
314 } else { 314 } else {
315 exitStatus = WTERMSIG(sigStatus); 315 exitStatus = WTERMSIG(sigStatus);
316 } 316 }
317 317
318 QMap<int,QString>::Iterator it = runningApps.find( sigPid ); 318 QMap<int,QString>::Iterator it = runningApps.find( sigPid );
319 if ( it == runningApps.end() ) { 319 if ( it == runningApps.end() ) {
320 if ( sigPid == qlPid ) { 320 if ( sigPid == qlPid ) {
321 qDebug( "quicklauncher stopped" ); 321 qDebug( "quicklauncher stopped" );
322 qlPid = 0; 322 qlPid = 0;
323 qlReady = FALSE; 323 qlReady = FALSE;
324 QFile::remove("/tmp/qcop-msg-quicklauncher" ); 324 QFile::remove("/tmp/qcop-msg-quicklauncher" );
325 QTimer::singleShot( 2000, this, SLOT(createQuickLauncher()) ); 325 QTimer::singleShot( 2000, this, SLOT(createQuickLauncher()) );
326 } 326 }
327/* 327/*
328 if ( sigPid == -1 ) 328 if ( sigPid == -1 )
329 qDebug("non-qtopia application exited (disregarded)"); 329 qDebug("non-qtopia application exited (disregarded)");
330 else 330 else
331 qDebug("==== no pid matching %d in list, definite bug", sigPid); 331 qDebug("==== no pid matching %d in list, definite bug", sigPid);
332*/ 332*/
333 return; 333 return;
334 } 334 }
335 QString appName = *it; 335 QString appName = *it;
336 runningApps.remove(it); 336 runningApps.remove(it);
337 337
338 QMap<QString,int>::Iterator hbit = waitingHeartbeat.find(appName); 338 QMap<QString,int>::Iterator hbit = waitingHeartbeat.find(appName);
339 if ( hbit != waitingHeartbeat.end() ) { 339 if ( hbit != waitingHeartbeat.end() ) {
340 killTimer( *hbit ); 340 killTimer( *hbit );
341 waitingHeartbeat.remove( hbit ); 341 waitingHeartbeat.remove( hbit );
342 } 342 }
343 if ( appName == appKillerName ) { 343 if ( appName == appKillerName ) {
344 appKillerName = QString::null; 344 appKillerName = QString::null;
345 delete appKillerBox; 345 delete appKillerBox;
346 appKillerBox = 0; 346 appKillerBox = 0;
347 } 347 }
348 348
349 /* we must disable preload for an app that crashes as the system logic relies on preloaded apps 349 /* we must disable preload for an app that crashes as the system logic relies on preloaded apps
350 actually being loaded. If eg. the crash happened in the constructor, we can't automatically reload 350 actually being loaded. If eg. the crash happened in the constructor, we can't automatically reload
351 the app (withouth some timeout value for eg. 3 tries (which I think is a bad solution) 351 the app (withouth some timeout value for eg. 3 tries (which I think is a bad solution)
352 */ 352 */
353 bool preloadDisabled = FALSE; 353 bool preloadDisabled = FALSE;
354 if ( !DocumentList::appLnkSet ) return; 354 if ( !DocumentList::appLnkSet ) return;
355 const AppLnk* app = DocumentList::appLnkSet->findExec( appName ); 355 const AppLnk* app = DocumentList::appLnkSet->findExec( appName );
356 if ( !app ) return; // QCop messages processed to slow? 356 if ( !app ) return; // QCop messages processed to slow?
357 if ( crashed && app->isPreloaded() ) { 357 if ( crashed && app->isPreloaded() ) {
358 Config cfg("Launcher"); 358 Config cfg("Launcher");
359 cfg.setGroup("Preload"); 359 cfg.setGroup("Preload");
360 QStringList apps = cfg.readListEntry("Apps",','); 360 QStringList apps = cfg.readListEntry("Apps",',');
361 QString exe = app->exec(); 361 QString exe = app->exec();
362 apps.remove(exe); 362 apps.remove(exe);
363 cfg.writeEntry("Apps",apps,','); 363 cfg.writeEntry("Apps",apps,',');
364 preloadDisabled = TRUE; 364 preloadDisabled = TRUE;
365 } 365 }
366 366
367 // clean up 367 // clean up
368 if ( exitStatus ) { 368 if ( exitStatus ) {
369 QCopEnvelope e("QPE/System", "notBusy(QString)"); 369 QCopEnvelope e("QPE/System", "notBusy(QString)");
370 e << app->exec(); 370 e << app->exec();
371 } 371 }
372/* 372/*
373 // debug info 373 // debug info
374 for (it = runningApps.begin(); it != runningApps.end(); ++it) { 374 for (it = runningApps.begin(); it != runningApps.end(); ++it) {
375 qDebug("running according to internal list: %s, with pid %d", (*it).data(), it.key() ); 375 qDebug("running according to internal list: %s, with pid %d", (*it).data(), it.key() );
376 } 376 }
377*/ 377*/
378 378
379#ifdef QTOPIA_PROGRAM_MONITOR 379#ifdef QTOPIA_PROGRAM_MONITOR
380 if ( crashed ) { 380 if ( crashed ) {
381 QString sig; 381 QString sig;
382 switch( exitStatus ) { 382 switch( exitStatus ) {
383 case SIGABRT: sig = "SIGABRT"; break; 383 case SIGABRT: sig = "SIGABRT"; break;
384 case SIGALRM: sig = "SIGALRM"; break; 384 case SIGALRM: sig = "SIGALRM"; break;
385 case SIGBUS: sig = "SIGBUS"; break; 385 case SIGBUS: sig = "SIGBUS"; break;
386 case SIGFPE: sig = "SIGFPE"; break; 386 case SIGFPE: sig = "SIGFPE"; break;
387 case SIGHUP: sig = "SIGHUP"; break; 387 case SIGHUP: sig = "SIGHUP"; break;
388 case SIGILL: sig = "SIGILL"; break; 388 case SIGILL: sig = "SIGILL"; break;
389 case SIGKILL: sig = "SIGKILL"; break; 389 case SIGKILL: sig = "SIGKILL"; break;
390 case SIGPIPE: sig = "SIGPIPE"; break; 390 case SIGPIPE: sig = "SIGPIPE"; break;
391 case SIGQUIT: sig = "SIGQUIT"; break; 391 case SIGQUIT: sig = "SIGQUIT"; break;
392 case SIGSEGV: sig = "SIGSEGV"; break; 392 case SIGSEGV: sig = "SIGSEGV"; break;
393 case SIGTERM: sig = "SIGTERM"; break; 393 case SIGTERM: sig = "SIGTERM"; break;
394 case SIGTRAP: sig = "SIGTRAP"; break; 394 case SIGTRAP: sig = "SIGTRAP"; break;
395 default: sig = QString("Unkown %1").arg(exitStatus); 395 default: sig = QString("Unkown %1").arg(exitStatus);
396 } 396 }
397 if ( preloadDisabled ) 397 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>"); 398 sig += tr("<qt><p>Fast loading has been disabled for this application. Tap and hold the application icon to reenable it.</qt>");
399 399
400 QString str = tr("<qt><b>%1</b> was terminated due to signal code %2</qt>").arg( app->name() ).arg( sig ); 400 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 ); 401 QMessageBox::information(0, tr("Application terminated"), str );
402 } else { 402 } else {
403 if ( exitStatus == 255 ) { //could not find app (because global returns -1) 403 if ( exitStatus == 255 ) { //could not find app (because global returns -1)
404 QMessageBox::information(0, tr("Application not found"), tr("<qt>Could not locate application <b>%1</b></qt>").arg( app->exec() ) ); 404 QMessageBox::information(0, tr("Application not found"), tr("<qt>Could not locate application <b>%1</b></qt>").arg( app->exec() ) );
405 } else { 405 } else {
406 QFileInfo fi(OGlobal::tempDirPath() + "qcop-msg-" + appName); 406 QFileInfo fi(QString::fromLatin1("/tmp/qcop-msg-") + appName);
407 if ( fi.exists() && fi.size() ) { 407 if ( fi.exists() && fi.size() ) {
408 emit terminated(sigPid, appName); 408 emit terminated(sigPid, appName);
409 qWarning("Re executing obmitted for %s", appName.latin1() ); 409 qWarning("Re executing obmitted for %s", appName.latin1() );
410 // execute( appName, QString::null ); 410 // execute( appName, QString::null );
411 return; 411 return;
412 } 412 }
413 } 413 }
414 } 414 }
415 415
416#endif 416#endif
417 417
418 emit terminated(sigPid, appName); 418 emit terminated(sigPid, appName);
419} 419}
420#else 420#else
421void AppLauncher::sigStopped(int sigPid, int sigStatus) 421void AppLauncher::sigStopped(int sigPid, int sigStatus)
422{ 422{
423 qDebug("Unhandled signal : AppLauncher::sigStopped(int sigPid, int sigStatus)"); 423 qDebug("Unhandled signal : AppLauncher::sigStopped(int sigPid, int sigStatus)");
424} 424}
425#endif // Q_OS_WIN32 425#endif // Q_OS_WIN32
426 426
427bool AppLauncher::isRunning(const QString &app) 427bool AppLauncher::isRunning(const QString &app)
428{ 428{
429 for (QMap<int,QString>::ConstIterator it = runningApps.begin(); it != runningApps.end(); ++it) { 429 for (QMap<int,QString>::ConstIterator it = runningApps.begin(); it != runningApps.end(); ++it) {
430 if ( *it == app ) { 430 if ( *it == app ) {
431#ifdef Q_OS_UNIX 431#ifdef Q_OS_UNIX
432 pid_t t = ::__getpgid( it.key() ); 432 pid_t t = ::__getpgid( it.key() );
433 if ( t == -1 ) { 433 if ( t == -1 ) {
434 qDebug("appLauncher bug, %s believed running, but pid %d is not existing", app.data(), it.key() ); 434 qDebug("appLauncher bug, %s believed running, but pid %d is not existing", app.data(), it.key() );
435 runningApps.remove( it.key() ); 435 runningApps.remove( it.key() );
436 return FALSE; 436 return FALSE;
437 } 437 }
438#endif 438#endif
439 return TRUE; 439 return TRUE;
440 } 440 }
441 } 441 }
442 442
443 return FALSE; 443 return FALSE;
444} 444}
445 445
446bool AppLauncher::executeBuiltin(const QString &c, const QString &document) 446bool AppLauncher::executeBuiltin(const QString &c, const QString &document)
447{ 447{
448 Global::Command* builtin = OGlobal::builtinCommands(); 448 Global::Command* builtin = OGlobal::builtinCommands();
449 QGuardedPtr<QWidget> *running = OGlobal::builtinRunning(); 449 QGuardedPtr<QWidget> *running = OGlobal::builtinRunning();
450 450
451 // Attempt to execute the app using a builtin class for the app 451 // Attempt to execute the app using a builtin class for the app
452 if (builtin) { 452 if (builtin) {
453 for (int i = 0; builtin[i].file; i++) { 453 for (int i = 0; builtin[i].file; i++) {
454 if ( builtin[i].file == c ) { 454 if ( builtin[i].file == c ) {
455 if ( running[i] ) { 455 if ( running[i] ) {
456 if ( !document.isNull() && builtin[i].documentary ) 456 if ( !document.isNull() && builtin[i].documentary )
457 Global::setDocument(running[i], document); 457 Global::setDocument(running[i], document);
458 running[i]->raise(); 458 running[i]->raise();
459 running[i]->show(); 459 running[i]->show();
460 running[i]->setActiveWindow(); 460 running[i]->setActiveWindow();
461 } else { 461 } else {
462 running[i] = builtin[i].func( builtin[i].maximized ); 462 running[i] = builtin[i].func( builtin[i].maximized );
463 } 463 }
464#ifndef QT_NO_COP 464#ifndef QT_NO_COP
465 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 465 QCopEnvelope e("QPE/System", "notBusy(QString)" );
466 e << c; // that was quick ;-) 466 e << c; // that was quick ;-)
467#endif 467#endif
468 return TRUE; 468 return TRUE;
469 } 469 }
470 } 470 }
471 } 471 }
472 472
473 // Convert the command line in to a list of arguments 473 // Convert the command line in to a list of arguments
474 QStringList list = QStringList::split(QRegExp(" *"),c); 474 QStringList list = QStringList::split(QRegExp(" *"),c);
475 QString ap=list[0]; 475 QString ap=list[0];
476 476
477 if ( ap == "suspend" ) { // No tr 477 if ( ap == "suspend" ) { // No tr
478 QWSServer::processKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); 478 QWSServer::processKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
479 return TRUE; 479 return TRUE;
480 } 480 }
481 481
482 return FALSE; 482 return FALSE;
483} 483}
484 484
485bool AppLauncher::execute(const QString &c, const QString &docParam, bool noRaise) 485bool AppLauncher::execute(const QString &c, const QString &docParam, bool noRaise)
486{ 486{
487 qWarning("AppLauncher::execute"); 487 qWarning("AppLauncher::execute");
488 // Convert the command line in to a list of arguments 488 // Convert the command line in to a list of arguments
489 QStringList list = QStringList::split(QRegExp(" *"),c); 489 QStringList list = QStringList::split(QRegExp(" *"),c);
490 if ( !docParam.isEmpty() ) 490 if ( !docParam.isEmpty() )
491 list.append( docParam ); 491 list.append( docParam );
492 492
493 QString appName = list[0]; 493 QString appName = list[0];
494 if ( isRunning(appName) ) { 494 if ( isRunning(appName) ) {
495 QCString channel = "QPE/Application/"; 495 QCString channel = "QPE/Application/";
496 channel += appName.latin1(); 496 channel += appName.latin1();
497 497
498 // Need to lock it to avoid race conditions with QPEApplication::processQCopFile 498 // Need to lock it to avoid race conditions with QPEApplication::processQCopFile
499 QFile f(OGlobal::tempDirPath() + "qcop-msg-" + appName); 499 QFile f(QString::fromLatin1("/tmp/qcop-msg-") + appName);
500 if ( !noRaise && f.open(IO_WriteOnly | IO_Append) ) { 500 if ( !noRaise && f.open(IO_WriteOnly | IO_Append) ) {
501#ifndef Q_OS_WIN32 501#ifndef Q_OS_WIN32
502 flock(f.handle(), LOCK_EX); 502 flock(f.handle(), LOCK_EX);
503#endif 503#endif
504 504
505 QDataStream ds(&f); 505 QDataStream ds(&f);
506 QByteArray b; 506 QByteArray b;
507 QDataStream bstream(b, IO_WriteOnly); 507 QDataStream bstream(b, IO_WriteOnly);
508 if ( !f.size() ) { 508 if ( !f.size() ) {
509 ds << channel << QCString("raise()") << b; 509 ds << channel << QCString("raise()") << b;
510 if ( !waitingHeartbeat.contains( appName ) && appKillerName != appName ) { 510 if ( !waitingHeartbeat.contains( appName ) && appKillerName != appName ) {
511 int id = startTimer(RAISE_TIMEOUT_MS); 511 int id = startTimer(RAISE_TIMEOUT_MS);
512 waitingHeartbeat.insert( appName, id ); 512 waitingHeartbeat.insert( appName, id );
513 } 513 }
514 } 514 }
515 if ( !docParam.isEmpty() ) { 515 if ( !docParam.isEmpty() ) {
516 bstream << docParam; 516 bstream << docParam;
517 ds << channel << QCString("setDocument(QString)") << b; 517 ds << channel << QCString("setDocument(QString)") << b;
518 } 518 }
519 519
520 f.flush(); 520 f.flush();
521#ifndef Q_OS_WIN32 521#ifndef Q_OS_WIN32
522 flock(f.handle(), LOCK_UN); 522 flock(f.handle(), LOCK_UN);
523#endif 523#endif
524 f.close(); 524 f.close();
525 } 525 }
526 if ( QCopChannel::isRegistered(channel) ) // avoid unnecessary warnings 526 if ( QCopChannel::isRegistered(channel) ) // avoid unnecessary warnings
527 QCopChannel::send(channel,"QPEProcessQCop()"); 527 QCopChannel::send(channel,"QPEProcessQCop()");
528 528
529 return TRUE; 529 return TRUE;
530 } 530 }
531 531
532#ifdef QT_NO_QWS_MULTIPROCESS 532#ifdef QT_NO_QWS_MULTIPROCESS
533 QMessageBox::warning( 0, tr("Error"), tr("<qt>Could not find the application %1</qt>").arg(c), 533 QMessageBox::warning( 0, tr("Error"), tr("<qt>Could not find the application %1</qt>").arg(c),
534 tr("OK"), 0, 0, 0, 1 ); 534 tr("OK"), 0, 0, 0, 1 );
535#else 535#else
536 536
537 QStrList slist; 537 QStrList slist;
538 unsigned j; 538 unsigned j;
539 for ( j = 0; j < list.count(); j++ ) 539 for ( j = 0; j < list.count(); j++ )
540 slist.append( list[j].utf8() ); 540 slist.append( list[j].utf8() );
541 541
542 const char **args = new const char *[slist.count() + 1]; 542 const char **args = new const char *[slist.count() + 1];
543 for ( j = 0; j < slist.count(); j++ ) 543 for ( j = 0; j < slist.count(); j++ )
544 args[j] = slist.at(j); 544 args[j] = slist.at(j);
545 args[j] = NULL; 545 args[j] = NULL;
546 546
547#ifndef Q_OS_WIN32 547#ifndef Q_OS_WIN32
548#ifdef Q_OS_MACX 548#ifdef Q_OS_MACX
549 if ( qlPid && qlReady && QFile::exists( QPEApplication::qpeDir()+"plugins/application/lib"+args[0] + ".dylib" ) ) { 549 if ( qlPid && qlReady && QFile::exists( QPEApplication::qpeDir()+"plugins/application/lib"+args[0] + ".dylib" ) ) {
550#else 550#else
551 if ( qlPid && qlReady && QFile::exists( QPEApplication::qpeDir()+"plugins/application/lib"+args[0] + ".so" ) ) { 551 if ( qlPid && qlReady && QFile::exists( QPEApplication::qpeDir()+"plugins/application/lib"+args[0] + ".so" ) ) {
552#endif /* Q_OS_MACX */ 552#endif /* Q_OS_MACX */
553 qDebug( "Quick launching: %s", args[0] ); 553 qDebug( "Quick launching: %s", args[0] );
554 if ( getuid() == 0 ) 554 if ( getuid() == 0 )
555 setpriority( PRIO_PROCESS, qlPid, 0 ); 555 setpriority( PRIO_PROCESS, qlPid, 0 );
556 QCString qlch("QPE/QuickLauncher-"); 556 QCString qlch("QPE/QuickLauncher-");
557 qlch += QString::number(qlPid); 557 qlch += QString::number(qlPid);
558 QCopEnvelope env( qlch, "execute(QStrList)" ); 558 QCopEnvelope env( qlch, "execute(QStrList)" );
559 env << slist; 559 env << slist;
560 runningApps[qlPid] = QString(args[0]); 560 runningApps[qlPid] = QString(args[0]);
561 emit launched(qlPid, QString(args[0])); 561 emit launched(qlPid, QString(args[0]));
562 QCopEnvelope e("QPE/System", "busy()"); 562 QCopEnvelope e("QPE/System", "busy()");
563 qlPid = 0; 563 qlPid = 0;
564 qlReady = FALSE; 564 qlReady = FALSE;
565 QTimer::singleShot( getuid() == 0 ? 800 : 1500, this, SLOT(createQuickLauncher()) ); 565 QTimer::singleShot( getuid() == 0 ? 800 : 1500, this, SLOT(createQuickLauncher()) );
566 } else { 566 } else {
567 int pid = ::vfork(); 567 int pid = ::vfork();
568 if ( !pid ) { 568 if ( !pid ) {
569 for ( int fd = 3; fd < 100; fd++ ) 569 for ( int fd = 3; fd < 100; fd++ )
570 ::close( fd ); 570 ::close( fd );
571 ::setpgid( ::getpid(), ::getppid() ); 571 ::setpgid( ::getpid(), ::getppid() );
572 // Try bindir first, so that foo/bar works too 572 // Try bindir first, so that foo/bar works too
573 ::execv( QPEApplication::qpeDir()+"bin/"+args[0], (char * const *)args ); 573 ::execv( QPEApplication::qpeDir()+"bin/"+args[0], (char * const *)args );
574 ::execvp( args[0], (char * const *)args ); 574 ::execvp( args[0], (char * const *)args );
575 _exit( -1 ); 575 _exit( -1 );
576 } 576 }
577 577
578 runningApps[pid] = QString(args[0]); 578 runningApps[pid] = QString(args[0]);
579 emit launched(pid, QString(args[0])); 579 emit launched(pid, QString(args[0]));
580 QCopEnvelope e("QPE/System", "busy()"); 580 QCopEnvelope e("QPE/System", "busy()");
581 } 581 }
582#else 582#else
583 QProcess *proc = new QProcess(this); 583 QProcess *proc = new QProcess(this);
584 if (proc){ 584 if (proc){
585 for (int i=0; i < slist.count(); i++) 585 for (int i=0; i < slist.count(); i++)
586 proc->addArgument(args[i]); 586 proc->addArgument(args[i]);
587 connect(proc, SIGNAL(processExited()), this, SLOT(processExited())); 587 connect(proc, SIGNAL(processExited()), this, SLOT(processExited()));
588 if (!proc->start()){ 588 if (!proc->start()){
589 qDebug("Unable to start application %s", args[0]); 589 qDebug("Unable to start application %s", args[0]);
590 }else{ 590 }else{
591 PROCESS_INFORMATION *procInfo = (PROCESS_INFORMATION *)proc->processIdentifier(); 591 PROCESS_INFORMATION *procInfo = (PROCESS_INFORMATION *)proc->processIdentifier();
592 if (procInfo){ 592 if (procInfo){
593 DWORD pid = procInfo->dwProcessId; 593 DWORD pid = procInfo->dwProcessId;
594 runningApps[pid] = QString(args[0]); 594 runningApps[pid] = QString(args[0]);
595 runningAppsProc.append(proc); 595 runningAppsProc.append(proc);
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp
index bf06e75..9e53bb0 100644
--- a/core/launcher/main.cpp
+++ b/core/launcher/main.cpp
@@ -1,171 +1,171 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#ifndef QTOPIA_INTERNAL_FILEOPERATIONS 21#ifndef QTOPIA_INTERNAL_FILEOPERATIONS
22#define QTOPIA_INTERNAL_FILEOPERATIONS 22#define QTOPIA_INTERNAL_FILEOPERATIONS
23#endif 23#endif
24#include "server.h" 24#include "server.h"
25#include "serverapp.h" 25#include "serverapp.h"
26#include "taskbar.h" 26#include "taskbar.h"
27#include "stabmon.h" 27#include "stabmon.h"
28#include "launcher.h" 28#include "launcher.h"
29#include "firstuse.h" 29#include "firstuse.h"
30 30
31#include <opie2/oglobal.h> 31#include <opie2/oglobal.h>
32 32
33#include <qtopia/qpeapplication.h> 33#include <qtopia/qpeapplication.h>
34#include <qtopia/network.h> 34#include <qtopia/network.h>
35#include <qtopia/config.h> 35#include <qtopia/config.h>
36//#include <qtopia/custom.h> 36//#include <qtopia/custom.h>
37 37
38 38
39#include <qfile.h> 39#include <qfile.h>
40#include <qdir.h> 40#include <qdir.h>
41#ifdef QWS 41#ifdef QWS
42#include <qwindowsystem_qws.h> 42#include <qwindowsystem_qws.h>
43#include <qtopia/qcopenvelope_qws.h> 43#include <qtopia/qcopenvelope_qws.h>
44#endif 44#endif
45#include <qtopia/alarmserver.h> 45#include <qtopia/alarmserver.h>
46 46
47#include <stdlib.h> 47#include <stdlib.h>
48#include <stdio.h> 48#include <stdio.h>
49#include <signal.h> 49#include <signal.h>
50#ifndef Q_OS_WIN32 50#ifndef Q_OS_WIN32
51#include <unistd.h> 51#include <unistd.h>
52#else 52#else
53#include <process.h> 53#include <process.h>
54#endif 54#endif
55 55
56#include "calibrate.h" 56#include "calibrate.h"
57 57
58 58
59#ifdef QT_QWS_LOGIN 59#ifdef QT_QWS_LOGIN
60#include "../login/qdmdialogimpl.h" 60#include "../login/qdmdialogimpl.h"
61#endif 61#endif
62 62
63#ifdef Q_WS_QWS 63#ifdef Q_WS_QWS
64#include <qkeyboard_qws.h> 64#include <qkeyboard_qws.h>
65#endif 65#endif
66 66
67#include <qmessagebox.h> 67#include <qmessagebox.h>
68#include <opie2/odevice.h> 68#include <opie2/odevice.h>
69 69
70using namespace Opie; 70using namespace Opie;
71 71
72 72
73static void cleanup() 73static void cleanup()
74{ 74{
75 QDir dir( OGlobal::tempDirPath(), "qcop-msg-*" ); 75 QDir dir( "/tmp", "qcop-msg-*" );
76 76
77 QStringList stale = dir.entryList(); 77 QStringList stale = dir.entryList();
78 QStringList::Iterator it; 78 QStringList::Iterator it;
79 for ( it = stale.begin(); it != stale.end(); ++it ) { 79 for ( it = stale.begin(); it != stale.end(); ++it ) {
80 dir.remove( *it ); 80 dir.remove( *it );
81 } 81 }
82} 82}
83 83
84static void refreshTimeZoneConfig() 84static void refreshTimeZoneConfig()
85{ 85{
86 /* ### FIXME timezone handling */ 86 /* ### FIXME timezone handling */
87#if 0 87#if 0
88 // We need to help WorldTime in setting up its configuration for 88 // We need to help WorldTime in setting up its configuration for
89 // the current translation 89 // the current translation
90 // BEGIN no tr 90 // BEGIN no tr
91 const char *defaultTz[] = { 91 const char *defaultTz[] = {
92 "America/New_York", 92 "America/New_York",
93 "America/Los_Angeles", 93 "America/Los_Angeles",
94 "Europe/Oslo", 94 "Europe/Oslo",
95 "Asia/Tokyo", 95 "Asia/Tokyo",
96 "Asia/Hong_Kong", 96 "Asia/Hong_Kong",
97 "Australia/Brisbane", 97 "Australia/Brisbane",
98 0 98 0
99 }; 99 };
100 // END no tr 100 // END no tr
101 101
102 TimeZone curZone; 102 TimeZone curZone;
103 QString zoneID; 103 QString zoneID;
104 int zoneIndex; 104 int zoneIndex;
105 Config cfg = Config( "WorldTime" ); 105 Config cfg = Config( "WorldTime" );
106 cfg.setGroup( "TimeZones" ); 106 cfg.setGroup( "TimeZones" );
107 if (!cfg.hasKey( "Zone0" )){ 107 if (!cfg.hasKey( "Zone0" )){
108 // We have no existing timezones use the defaults which are untranslated strings 108 // We have no existing timezones use the defaults which are untranslated strings
109 QString currTz = TimeZone::current().id(); 109 QString currTz = TimeZone::current().id();
110 QStringList zoneDefaults; 110 QStringList zoneDefaults;
111 zoneDefaults.append( currTz ); 111 zoneDefaults.append( currTz );
112 for ( int i = 0; defaultTz[i] && zoneDefaults.count() < 6; i++ ) { 112 for ( int i = 0; defaultTz[i] && zoneDefaults.count() < 6; i++ ) {
113 if ( defaultTz[i] != currTz ) 113 if ( defaultTz[i] != currTz )
114 zoneDefaults.append( defaultTz[i] ); 114 zoneDefaults.append( defaultTz[i] );
115 } 115 }
116 zoneIndex = 0; 116 zoneIndex = 0;
117 for (QStringList::Iterator it = zoneDefaults.begin(); it != zoneDefaults.end() ; ++it){ 117 for (QStringList::Iterator it = zoneDefaults.begin(); it != zoneDefaults.end() ; ++it){
118 cfg.writeEntry( "Zone" + QString::number( zoneIndex ) , *it); 118 cfg.writeEntry( "Zone" + QString::number( zoneIndex ) , *it);
119 zoneIndex++; 119 zoneIndex++;
120 } 120 }
121 } 121 }
122 // We have an existing list of timezones refresh the 122 // We have an existing list of timezones refresh the
123 // translations of TimeZone name 123 // translations of TimeZone name
124 zoneIndex = 0; 124 zoneIndex = 0;
125 while (cfg.hasKey( "Zone"+ QString::number( zoneIndex ))){ 125 while (cfg.hasKey( "Zone"+ QString::number( zoneIndex ))){
126 zoneID = cfg.readEntry( "Zone" + QString::number( zoneIndex )); 126 zoneID = cfg.readEntry( "Zone" + QString::number( zoneIndex ));
127 curZone = TimeZone( zoneID ); 127 curZone = TimeZone( zoneID );
128 if ( !curZone.isValid() ){ 128 if ( !curZone.isValid() ){
129 qDebug( "initEnvironment() Invalid TimeZone %s", zoneID.latin1() ); 129 qDebug( "initEnvironment() Invalid TimeZone %s", zoneID.latin1() );
130 break; 130 break;
131 } 131 }
132 cfg.writeEntry( "ZoneName" + QString::number( zoneIndex ), curZone.city() ); 132 cfg.writeEntry( "ZoneName" + QString::number( zoneIndex ), curZone.city() );
133 zoneIndex++; 133 zoneIndex++;
134 } 134 }
135#endif 135#endif
136} 136}
137 137
138void initEnvironment() 138void initEnvironment()
139{ 139{
140#ifdef Q_OS_WIN32 140#ifdef Q_OS_WIN32
141 // Config file requires HOME dir which uses QDir which needs the winver 141 // Config file requires HOME dir which uses QDir which needs the winver
142 qt_init_winver(); 142 qt_init_winver();
143#endif 143#endif
144 Config config("locale"); 144 Config config("locale");
145 config.setGroup( "Location" ); 145 config.setGroup( "Location" );
146 QString tz = config.readEntry( "Timezone", getenv("TZ") ).stripWhiteSpace(); 146 QString tz = config.readEntry( "Timezone", getenv("TZ") ).stripWhiteSpace();
147 147
148 // if not timezone set, pick New York 148 // if not timezone set, pick New York
149 if (tz.isNull() || tz.isEmpty()) 149 if (tz.isNull() || tz.isEmpty())
150 tz = "America/New_York"; 150 tz = "America/New_York";
151 151
152 setenv( "TZ", tz, 1 ); 152 setenv( "TZ", tz, 1 );
153 config.writeEntry( "Timezone", tz); 153 config.writeEntry( "Timezone", tz);
154 154
155 config.setGroup( "Language" ); 155 config.setGroup( "Language" );
156 QString lang = config.readEntry( "Language", getenv("LANG") ).stripWhiteSpace(); 156 QString lang = config.readEntry( "Language", getenv("LANG") ).stripWhiteSpace();
157 if( lang.isNull() || lang.isEmpty()) 157 if( lang.isNull() || lang.isEmpty())
158 lang = "en_US"; 158 lang = "en_US";
159 159
160 setenv( "LANG", lang, 1 ); 160 setenv( "LANG", lang, 1 );
161 config.writeEntry("Language", lang); 161 config.writeEntry("Language", lang);
162 config.write(); 162 config.write();
163 163
164#if 0 164#if 0
165 setenv( "QWS_SIZE", "240x320", 0 ); 165 setenv( "QWS_SIZE", "240x320", 0 );
166#endif 166#endif
167 167
168 168
169 169
170 QString env(getenv("QWS_DISPLAY")); 170 QString env(getenv("QWS_DISPLAY"));
171 if (env.contains("Transformed")) { 171 if (env.contains("Transformed")) {