author | sandman <sandman> | 2002-12-01 22:23:22 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-12-01 22:23:22 (UTC) |
commit | 184ab086906979cdb9c2cc8b601bcd0ecc095576 (patch) (unidiff) | |
tree | 5e5ac0e6051529253bf28d5a58ae74680a47b776 /library/global.cpp | |
parent | 5a550802680d32ccb0ea0d596f514de7e13c45dc (diff) | |
download | opie-184ab086906979cdb9c2cc8b601bcd0ecc095576.zip opie-184ab086906979cdb9c2cc8b601bcd0ecc095576.tar.gz opie-184ab086906979cdb9c2cc8b601bcd0ecc095576.tar.bz2 |
The new preload library has to be used always, because of some binary
incompatibility between apps built with older tcs and shared libs built
with newer tcs. (see cvs comment for core/launcher/libpreload/preload.cpp)
-rw-r--r-- | library/global.cpp | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/library/global.cpp b/library/global.cpp index 42c2729..2162e02 100644 --- a/library/global.cpp +++ b/library/global.cpp | |||
@@ -353,470 +353,468 @@ void Global::addWords(const QString& dictname, const QStringList& wordlist) | |||
353 | If \a filename contains "/", it is the caller's responsibility to | 353 | If \a filename contains "/", it is the caller's responsibility to |
354 | ensure that those directories exist. | 354 | ensure that those directories exist. |
355 | */ | 355 | */ |
356 | QString Global::applicationFileName(const QString& appname, const QString& filename) | 356 | QString Global::applicationFileName(const QString& appname, const QString& filename) |
357 | { | 357 | { |
358 | QDir d; | 358 | QDir d; |
359 | QString r = getenv("HOME"); | 359 | QString r = getenv("HOME"); |
360 | r += "/Applications/"; | 360 | r += "/Applications/"; |
361 | if ( !QFile::exists( r ) ) | 361 | if ( !QFile::exists( r ) ) |
362 | if ( d.mkdir(r) == false ) | 362 | if ( d.mkdir(r) == false ) |
363 | return QString::null; | 363 | return QString::null; |
364 | r += appname; | 364 | r += appname; |
365 | if ( !QFile::exists( r ) ) | 365 | if ( !QFile::exists( r ) ) |
366 | if ( d.mkdir(r) == false ) | 366 | if ( d.mkdir(r) == false ) |
367 | return QString::null; | 367 | return QString::null; |
368 | r += "/"; r += filename; | 368 | r += "/"; r += filename; |
369 | return r; | 369 | return r; |
370 | } | 370 | } |
371 | 371 | ||
372 | /*! | 372 | /*! |
373 | \internal | 373 | \internal |
374 | */ | 374 | */ |
375 | void Global::createDocDir() | 375 | void Global::createDocDir() |
376 | { | 376 | { |
377 | if ( !docDirCreated ) { | 377 | if ( !docDirCreated ) { |
378 | docDirCreated = TRUE; | 378 | docDirCreated = TRUE; |
379 | mkdir( QPEApplication::documentDir().latin1(), 0755 ); | 379 | mkdir( QPEApplication::documentDir().latin1(), 0755 ); |
380 | } | 380 | } |
381 | } | 381 | } |
382 | 382 | ||
383 | 383 | ||
384 | /*! | 384 | /*! |
385 | Displays a status \a message to the user. This usually appears | 385 | Displays a status \a message to the user. This usually appears |
386 | in the taskbar for a short amount of time, then disappears. | 386 | in the taskbar for a short amount of time, then disappears. |
387 | */ | 387 | */ |
388 | void Global::statusMessage(const QString& message) | 388 | void Global::statusMessage(const QString& message) |
389 | { | 389 | { |
390 | #if!defined(QT_NO_COP) | 390 | #if!defined(QT_NO_COP) |
391 | QCopEnvelope e( "QPE/TaskBar", "message(QString)" ); | 391 | QCopEnvelope e( "QPE/TaskBar", "message(QString)" ); |
392 | e << message; | 392 | e << message; |
393 | #endif | 393 | #endif |
394 | } | 394 | } |
395 | 395 | ||
396 | /*! | 396 | /*! |
397 | \internal | 397 | \internal |
398 | */ | 398 | */ |
399 | void Global::applyStyle() | 399 | void Global::applyStyle() |
400 | { | 400 | { |
401 | #if !defined(QT_NO_COP) | 401 | #if !defined(QT_NO_COP) |
402 | QCopChannel::send( "QPE/System", "applyStyle()" ); | 402 | QCopChannel::send( "QPE/System", "applyStyle()" ); |
403 | #else | 403 | #else |
404 | ((QPEApplication *)qApp)->applyStyle(); // apply without needing QCop for floppy version | 404 | ((QPEApplication *)qApp)->applyStyle(); // apply without needing QCop for floppy version |
405 | #endif | 405 | #endif |
406 | } | 406 | } |
407 | 407 | ||
408 | /*! | 408 | /*! |
409 | \internal | 409 | \internal |
410 | */ | 410 | */ |
411 | QWidget *Global::shutdown( bool ) | 411 | QWidget *Global::shutdown( bool ) |
412 | { | 412 | { |
413 | #if !defined(QT_NO_COP) | 413 | #if !defined(QT_NO_COP) |
414 | QCopChannel::send( "QPE/System", "shutdown()" ); | 414 | QCopChannel::send( "QPE/System", "shutdown()" ); |
415 | #endif | 415 | #endif |
416 | return 0; | 416 | return 0; |
417 | } | 417 | } |
418 | 418 | ||
419 | /*! | 419 | /*! |
420 | \internal | 420 | \internal |
421 | */ | 421 | */ |
422 | QWidget *Global::restart( bool ) | 422 | QWidget *Global::restart( bool ) |
423 | { | 423 | { |
424 | #if !defined(QT_NO_COP) | 424 | #if !defined(QT_NO_COP) |
425 | QCopChannel::send( "QPE/System", "restart()" ); | 425 | QCopChannel::send( "QPE/System", "restart()" ); |
426 | #endif | 426 | #endif |
427 | return 0; | 427 | return 0; |
428 | } | 428 | } |
429 | 429 | ||
430 | /*! | 430 | /*! |
431 | Explicitly show the current input method. | 431 | Explicitly show the current input method. |
432 | 432 | ||
433 | Input methods are indicated in the taskbar by a small icon. If the | 433 | Input methods are indicated in the taskbar by a small icon. If the |
434 | input method is activated (shown) then it takes up some proportion | 434 | input method is activated (shown) then it takes up some proportion |
435 | of the bottom of the screen, to allow the user to interact (input | 435 | of the bottom of the screen, to allow the user to interact (input |
436 | characters) with it. | 436 | characters) with it. |
437 | 437 | ||
438 | \sa hideInputMethod() | 438 | \sa hideInputMethod() |
439 | */ | 439 | */ |
440 | void Global::showInputMethod() | 440 | void Global::showInputMethod() |
441 | { | 441 | { |
442 | #if !defined(QT_NO_COP) | 442 | #if !defined(QT_NO_COP) |
443 | QCopChannel::send( "QPE/TaskBar", "showInputMethod()" ); | 443 | QCopChannel::send( "QPE/TaskBar", "showInputMethod()" ); |
444 | #endif | 444 | #endif |
445 | } | 445 | } |
446 | 446 | ||
447 | /*! | 447 | /*! |
448 | Explicitly hide the current input method. | 448 | Explicitly hide the current input method. |
449 | 449 | ||
450 | The current input method is still indicated in the taskbar, but no | 450 | The current input method is still indicated in the taskbar, but no |
451 | longer takes up screen space, and can no longer be interacted with. | 451 | longer takes up screen space, and can no longer be interacted with. |
452 | 452 | ||
453 | \sa showInputMethod() | 453 | \sa showInputMethod() |
454 | */ | 454 | */ |
455 | void Global::hideInputMethod() | 455 | void Global::hideInputMethod() |
456 | { | 456 | { |
457 | #if !defined(QT_NO_COP) | 457 | #if !defined(QT_NO_COP) |
458 | QCopChannel::send( "QPE/TaskBar", "hideInputMethod()" ); | 458 | QCopChannel::send( "QPE/TaskBar", "hideInputMethod()" ); |
459 | #endif | 459 | #endif |
460 | } | 460 | } |
461 | 461 | ||
462 | 462 | ||
463 | /*! | 463 | /*! |
464 | \internal | 464 | \internal |
465 | */ | 465 | */ |
466 | bool Global::isBuiltinCommand( const QString &name ) | 466 | bool Global::isBuiltinCommand( const QString &name ) |
467 | { | 467 | { |
468 | if(!builtin) | 468 | if(!builtin) |
469 | return FALSE; // yes, it can happen | 469 | return FALSE; // yes, it can happen |
470 | for (int i = 0; builtin[i].file; i++) { | 470 | for (int i = 0; builtin[i].file; i++) { |
471 | if ( builtin[i].file == name ) { | 471 | if ( builtin[i].file == name ) { |
472 | return TRUE; | 472 | return TRUE; |
473 | } | 473 | } |
474 | } | 474 | } |
475 | return FALSE; | 475 | return FALSE; |
476 | } | 476 | } |
477 | 477 | ||
478 | Global::Command* Global::builtin=0; | 478 | Global::Command* Global::builtin=0; |
479 | QGuardedPtr<QWidget> *Global::running=0; | 479 | QGuardedPtr<QWidget> *Global::running=0; |
480 | 480 | ||
481 | /*! | 481 | /*! |
482 | \class Global::Command | 482 | \class Global::Command |
483 | \brief The Global::Command class is internal. | 483 | \brief The Global::Command class is internal. |
484 | \internal | 484 | \internal |
485 | */ | 485 | */ |
486 | 486 | ||
487 | /*! | 487 | /*! |
488 | \internal | 488 | \internal |
489 | */ | 489 | */ |
490 | void Global::setBuiltinCommands( Command* list ) | 490 | void Global::setBuiltinCommands( Command* list ) |
491 | { | 491 | { |
492 | if ( running ) | 492 | if ( running ) |
493 | delete [] running; | 493 | delete [] running; |
494 | 494 | ||
495 | builtin = list; | 495 | builtin = list; |
496 | int count = 0; | 496 | int count = 0; |
497 | if (!builtin) | 497 | if (!builtin) |
498 | return; | 498 | return; |
499 | while ( builtin[count].file ) | 499 | while ( builtin[count].file ) |
500 | count++; | 500 | count++; |
501 | 501 | ||
502 | running = new QGuardedPtr<QWidget> [ count ]; | 502 | running = new QGuardedPtr<QWidget> [ count ]; |
503 | } | 503 | } |
504 | 504 | ||
505 | /*! | 505 | /*! |
506 | \internal | 506 | \internal |
507 | */ | 507 | */ |
508 | void Global::setDocument( QWidget* receiver, const QString& document ) | 508 | void Global::setDocument( QWidget* receiver, const QString& document ) |
509 | { | 509 | { |
510 | Emitter emitter(receiver,document); | 510 | Emitter emitter(receiver,document); |
511 | } | 511 | } |
512 | 512 | ||
513 | /*! | 513 | /*! |
514 | \internal | 514 | \internal |
515 | */ | 515 | */ |
516 | bool Global::terminateBuiltin( const QString& n ) | 516 | bool Global::terminateBuiltin( const QString& n ) |
517 | { | 517 | { |
518 | if (!builtin) | 518 | if (!builtin) |
519 | return FALSE; | 519 | return FALSE; |
520 | for (int i = 0; builtin[i].file; i++) { | 520 | for (int i = 0; builtin[i].file; i++) { |
521 | if ( builtin[i].file == n ) { | 521 | if ( builtin[i].file == n ) { |
522 | delete running[i]; | 522 | delete running[i]; |
523 | return TRUE; | 523 | return TRUE; |
524 | } | 524 | } |
525 | } | 525 | } |
526 | return FALSE; | 526 | return FALSE; |
527 | } | 527 | } |
528 | 528 | ||
529 | /*! | 529 | /*! |
530 | \internal | 530 | \internal |
531 | */ | 531 | */ |
532 | void Global::terminate( const AppLnk* app ) | 532 | void Global::terminate( const AppLnk* app ) |
533 | { | 533 | { |
534 | //if ( terminateBuiltin(app->exec()) ) return; // maybe? haven't tried this | 534 | //if ( terminateBuiltin(app->exec()) ) return; // maybe? haven't tried this |
535 | 535 | ||
536 | #ifndef QT_NO_COP | 536 | #ifndef QT_NO_COP |
537 | QCString channel = "QPE/Application/" + app->exec().utf8(); | 537 | QCString channel = "QPE/Application/" + app->exec().utf8(); |
538 | if ( QCopChannel::isRegistered(channel) ) { | 538 | if ( QCopChannel::isRegistered(channel) ) { |
539 | QCopEnvelope e(channel, "quit()"); | 539 | QCopEnvelope e(channel, "quit()"); |
540 | } | 540 | } |
541 | #endif | 541 | #endif |
542 | } | 542 | } |
543 | 543 | ||
544 | /*! | 544 | /*! |
545 | Low-level function to run command \a c. | 545 | Low-level function to run command \a c. |
546 | 546 | ||
547 | \warning Do not use this function. Use execute instead. | 547 | \warning Do not use this function. Use execute instead. |
548 | 548 | ||
549 | \sa execute() | 549 | \sa execute() |
550 | */ | 550 | */ |
551 | void Global::invoke(const QString &c) | 551 | void Global::invoke(const QString &c) |
552 | { | 552 | { |
553 | // Convert the command line in to a list of arguments | 553 | // Convert the command line in to a list of arguments |
554 | QStringList list = QStringList::split(QRegExp(" *"),c); | 554 | QStringList list = QStringList::split(QRegExp(" *"),c); |
555 | 555 | ||
556 | #if !defined(QT_NO_COP) | 556 | #if !defined(QT_NO_COP) |
557 | QString ap=list[0]; | 557 | QString ap=list[0]; |
558 | // see if the application is already running | 558 | // see if the application is already running |
559 | // XXX should lock file /tmp/qcop-msg-ap | 559 | // XXX should lock file /tmp/qcop-msg-ap |
560 | if ( QCopChannel::isRegistered( ("QPE/Application/" + ap).latin1() ) ) { | 560 | if ( QCopChannel::isRegistered( ("QPE/Application/" + ap).latin1() ) ) { |
561 | // If the channel is already register, the app is already running, so show it. | 561 | // If the channel is already register, the app is already running, so show it. |
562 | { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } | 562 | { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } |
563 | 563 | ||
564 | QCopEnvelope e("QPE/System", "notBusy(QString)" ); | 564 | QCopEnvelope e("QPE/System", "notBusy(QString)" ); |
565 | e << ap; | 565 | e << ap; |
566 | return; | 566 | return; |
567 | } | 567 | } |
568 | // XXX should unlock file /tmp/qcop-msg-ap | 568 | // XXX should unlock file /tmp/qcop-msg-ap |
569 | //see if it is being started | 569 | //see if it is being started |
570 | if ( StartingAppList::isStarting( ap ) ) { | 570 | if ( StartingAppList::isStarting( ap ) ) { |
571 | QCopEnvelope e("QPE/System", "notBusy(QString)" ); | 571 | QCopEnvelope e("QPE/System", "notBusy(QString)" ); |
572 | e << ap; | 572 | e << ap; |
573 | return; | 573 | return; |
574 | } | 574 | } |
575 | 575 | ||
576 | #endif | 576 | #endif |
577 | 577 | ||
578 | #ifdef QT_NO_QWS_MULTIPROCESS | 578 | #ifdef QT_NO_QWS_MULTIPROCESS |
579 | QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 ); | 579 | QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 ); |
580 | #else | 580 | #else |
581 | 581 | ||
582 | QStrList slist; | 582 | QStrList slist; |
583 | unsigned int j; | 583 | unsigned int j; |
584 | for ( j = 0; j < list.count(); j++ ) | 584 | for ( j = 0; j < list.count(); j++ ) |
585 | slist.append( list[j].utf8() ); | 585 | slist.append( list[j].utf8() ); |
586 | 586 | ||
587 | const char **args = new (const char *)[slist.count() + 1]; | 587 | const char **args = new (const char *)[slist.count() + 1]; |
588 | for ( j = 0; j < slist.count(); j++ ) | 588 | for ( j = 0; j < slist.count(); j++ ) |
589 | args[j] = slist.at(j); | 589 | args[j] = slist.at(j); |
590 | args[j] = NULL; | 590 | args[j] = NULL; |
591 | 591 | ||
592 | #if !defined(QT_NO_COP) | 592 | #if !defined(QT_NO_COP) |
593 | // an attempt to show a wait... | 593 | // an attempt to show a wait... |
594 | // more logic should be used, but this will be fine for the moment... | 594 | // more logic should be used, but this will be fine for the moment... |
595 | QCopEnvelope ( "QPE/System", "busy()" ); | 595 | QCopEnvelope ( "QPE/System", "busy()" ); |
596 | #endif | 596 | #endif |
597 | 597 | ||
598 | #ifdef HAVE_QUICKEXEC | 598 | #ifdef HAVE_QUICKEXEC |
599 | QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so"; | 599 | QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so"; |
600 | qDebug("libfile = %s", libexe.latin1() ); | 600 | qDebug("libfile = %s", libexe.latin1() ); |
601 | if ( QFile::exists( libexe ) ) { | 601 | if ( QFile::exists( libexe ) ) { |
602 | qDebug("calling quickexec %s", libexe.latin1() ); | 602 | qDebug("calling quickexec %s", libexe.latin1() ); |
603 | quickexecv( libexe.utf8().data(), (const char **)args ); | 603 | quickexecv( libexe.utf8().data(), (const char **)args ); |
604 | } else | 604 | } else |
605 | #endif | 605 | #endif |
606 | { | 606 | { |
607 | char *oldpre = ::getenv ( "LD_PRELOAD" ); | 607 | char *oldpre = ::getenv ( "LD_PRELOAD" ); |
608 | 608 | ||
609 | extern bool opie_block_style; | ||
610 | |||
611 | QString newpre = QPEApplication::qpeDir ( ) + "/lib/libpreload.so"; | 609 | QString newpre = QPEApplication::qpeDir ( ) + "/lib/libpreload.so"; |
612 | if ( opie_block_style && QFile::exists ( newpre )) { | 610 | if ( QFile::exists ( newpre )) { |
613 | if ( oldpre && oldpre [0] ) | 611 | if ( oldpre && oldpre [0] ) |
614 | newpre = newpre + ":" + oldpre; | 612 | newpre = newpre + ":" + oldpre; |
615 | ::setenv ( "LD_PRELOAD", newpre. latin1( ), 1 ); | 613 | ::setenv ( "LD_PRELOAD", newpre. latin1( ), 1 ); |
616 | qDebug ( "\nPRELOADING\n" ); | 614 | qDebug ( "\nPRELOADING\n" ); |
617 | } | 615 | } |
618 | 616 | ||
619 | if ( !::vfork() ) { | 617 | if ( !::vfork() ) { |
620 | for ( int fd = 3; fd < 100; fd++ ) | 618 | for ( int fd = 3; fd < 100; fd++ ) |
621 | ::close( fd ); | 619 | ::close( fd ); |
622 | ::setpgid( ::getpid(), ::getppid() ); | 620 | ::setpgid( ::getpid(), ::getppid() ); |
623 | // Try bindir first, so that foo/bar works too | 621 | // Try bindir first, so that foo/bar works too |
624 | ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args ); | 622 | ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args ); |
625 | ::execvp( args[0], (char * const *)args ); | 623 | ::execvp( args[0], (char * const *)args ); |
626 | _exit( -1 ); | 624 | _exit( -1 ); |
627 | } | 625 | } |
628 | if ( oldpre ) | 626 | if ( oldpre ) |
629 | ::setenv ( "LD_PRELOAD", oldpre, 1 ); | 627 | ::setenv ( "LD_PRELOAD", oldpre, 1 ); |
630 | else | 628 | else |
631 | ::unsetenv ( "LD_PRELOAD" ); | 629 | ::unsetenv ( "LD_PRELOAD" ); |
632 | } | 630 | } |
633 | StartingAppList::add( list[0] ); | 631 | StartingAppList::add( list[0] ); |
634 | #endif //QT_NO_QWS_MULTIPROCESS | 632 | #endif //QT_NO_QWS_MULTIPROCESS |
635 | } | 633 | } |
636 | 634 | ||
637 | 635 | ||
638 | /*! | 636 | /*! |
639 | Executes the application identfied by \a c, passing \a | 637 | Executes the application identfied by \a c, passing \a |
640 | document if it isn't null. | 638 | document if it isn't null. |
641 | 639 | ||
642 | Note that a better approach might be to send a QCop message to the | 640 | Note that a better approach might be to send a QCop message to the |
643 | application's QPE/Application/\e{appname} channel. | 641 | application's QPE/Application/\e{appname} channel. |
644 | */ | 642 | */ |
645 | void Global::execute( const QString &c, const QString& document ) | 643 | void Global::execute( const QString &c, const QString& document ) |
646 | { | 644 | { |
647 | if ( qApp->type() != QApplication::GuiServer ) { | 645 | if ( qApp->type() != QApplication::GuiServer ) { |
648 | // ask the server to do the work | 646 | // ask the server to do the work |
649 | #if !defined(QT_NO_COP) | 647 | #if !defined(QT_NO_COP) |
650 | if ( document.isNull() ) { | 648 | if ( document.isNull() ) { |
651 | QCopEnvelope e( "QPE/System", "execute(QString)" ); | 649 | QCopEnvelope e( "QPE/System", "execute(QString)" ); |
652 | e << c; | 650 | e << c; |
653 | } else { | 651 | } else { |
654 | QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); | 652 | QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); |
655 | e << c << document; | 653 | e << c << document; |
656 | } | 654 | } |
657 | #endif | 655 | #endif |
658 | return; | 656 | return; |
659 | } | 657 | } |
660 | 658 | ||
661 | // Attempt to execute the app using a builtin class for the app first | 659 | // Attempt to execute the app using a builtin class for the app first |
662 | // else try and find it in the bin directory | 660 | // else try and find it in the bin directory |
663 | if (builtin) { | 661 | if (builtin) { |
664 | for (int i = 0; builtin[i].file; i++) { | 662 | for (int i = 0; builtin[i].file; i++) { |
665 | if ( builtin[i].file == c ) { | 663 | if ( builtin[i].file == c ) { |
666 | if ( running[i] ) { | 664 | if ( running[i] ) { |
667 | if ( !document.isNull() && builtin[i].documentary ) | 665 | if ( !document.isNull() && builtin[i].documentary ) |
668 | setDocument(running[i], document); | 666 | setDocument(running[i], document); |
669 | running[i]->raise(); | 667 | running[i]->raise(); |
670 | running[i]->show(); | 668 | running[i]->show(); |
671 | running[i]->setActiveWindow(); | 669 | running[i]->setActiveWindow(); |
672 | } else { | 670 | } else { |
673 | running[i] = builtin[i].func( builtin[i].maximized ); | 671 | running[i] = builtin[i].func( builtin[i].maximized ); |
674 | } | 672 | } |
675 | #ifndef QT_NO_COP | 673 | #ifndef QT_NO_COP |
676 | QCopEnvelope e("QPE/System", "notBusy(QString)" ); | 674 | QCopEnvelope e("QPE/System", "notBusy(QString)" ); |
677 | e << c; // that was quick ;-) | 675 | e << c; // that was quick ;-) |
678 | #endif | 676 | #endif |
679 | return; | 677 | return; |
680 | } | 678 | } |
681 | } | 679 | } |
682 | } | 680 | } |
683 | 681 | ||
684 | //Global::invoke(c, document); | 682 | //Global::invoke(c, document); |
685 | 683 | ||
686 | // Convert the command line in to a list of arguments | 684 | // Convert the command line in to a list of arguments |
687 | QStringList list = QStringList::split(QRegExp(" *"),c); | 685 | QStringList list = QStringList::split(QRegExp(" *"),c); |
688 | 686 | ||
689 | #if !defined(QT_NO_COP) | 687 | #if !defined(QT_NO_COP) |
690 | QString ap=list[0]; | 688 | QString ap=list[0]; |
691 | 689 | ||
692 | qDebug("executing %s", ap.latin1() ); | 690 | qDebug("executing %s", ap.latin1() ); |
693 | 691 | ||
694 | /* if need be, sending a qcop message will result in an invoke, see | 692 | /* if need be, sending a qcop message will result in an invoke, see |
695 | preceeding function */ | 693 | preceeding function */ |
696 | invoke( ap ); | 694 | invoke( ap ); |
697 | //{ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } | 695 | //{ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } |
698 | if ( !document.isEmpty() ) { | 696 | if ( !document.isEmpty() ) { |
699 | QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" ); | 697 | QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" ); |
700 | env << document; | 698 | env << document; |
701 | } | 699 | } |
702 | #endif | 700 | #endif |
703 | } | 701 | } |
704 | 702 | ||
705 | /*! | 703 | /*! |
706 | Returns the string \a s with the characters '\', '"', and '$' quoted | 704 | Returns the string \a s with the characters '\', '"', and '$' quoted |
707 | by a preceeding '\'. | 705 | by a preceeding '\'. |
708 | 706 | ||
709 | \sa stringQuote() | 707 | \sa stringQuote() |
710 | */ | 708 | */ |
711 | QString Global::shellQuote(const QString& s) | 709 | QString Global::shellQuote(const QString& s) |
712 | { | 710 | { |
713 | QString r="\""; | 711 | QString r="\""; |
714 | for (int i=0; i<(int)s.length(); i++) { | 712 | for (int i=0; i<(int)s.length(); i++) { |
715 | char c = s[i].latin1(); | 713 | char c = s[i].latin1(); |
716 | switch (c) { | 714 | switch (c) { |
717 | case '\\': case '"': case '$': | 715 | case '\\': case '"': case '$': |
718 | r+="\\"; | 716 | r+="\\"; |
719 | } | 717 | } |
720 | r += s[i]; | 718 | r += s[i]; |
721 | } | 719 | } |
722 | r += "\""; | 720 | r += "\""; |
723 | return r; | 721 | return r; |
724 | } | 722 | } |
725 | 723 | ||
726 | /*! | 724 | /*! |
727 | Returns the string \a s with the characters '\' and '"' quoted by a | 725 | Returns the string \a s with the characters '\' and '"' quoted by a |
728 | preceeding '\'. | 726 | preceeding '\'. |
729 | 727 | ||
730 | \sa shellQuote() | 728 | \sa shellQuote() |
731 | */ | 729 | */ |
732 | QString Global::stringQuote(const QString& s) | 730 | QString Global::stringQuote(const QString& s) |
733 | { | 731 | { |
734 | QString r="\""; | 732 | QString r="\""; |
735 | for (int i=0; i<(int)s.length(); i++) { | 733 | for (int i=0; i<(int)s.length(); i++) { |
736 | char c = s[i].latin1(); | 734 | char c = s[i].latin1(); |
737 | switch (c) { | 735 | switch (c) { |
738 | case '\\': case '"': | 736 | case '\\': case '"': |
739 | r+="\\"; | 737 | r+="\\"; |
740 | } | 738 | } |
741 | r += s[i]; | 739 | r += s[i]; |
742 | } | 740 | } |
743 | r += "\""; | 741 | r += "\""; |
744 | return r; | 742 | return r; |
745 | } | 743 | } |
746 | 744 | ||
747 | /*! | 745 | /*! |
748 | Finds all documents on the system's document directories which | 746 | Finds all documents on the system's document directories which |
749 | match the filter \a mimefilter, and appends the resulting DocLnk | 747 | match the filter \a mimefilter, and appends the resulting DocLnk |
750 | objects to \a folder. | 748 | objects to \a folder. |
751 | */ | 749 | */ |
752 | void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter) | 750 | void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter) |
753 | { | 751 | { |
754 | QString homedocs = QString(getenv("HOME")) + "/Documents"; | 752 | QString homedocs = QString(getenv("HOME")) + "/Documents"; |
755 | DocLnkSet d(homedocs,mimefilter); | 753 | DocLnkSet d(homedocs,mimefilter); |
756 | folder->appendFrom(d); | 754 | folder->appendFrom(d); |
757 | /** let's do intellegint way of searching these files | 755 | /** let's do intellegint way of searching these files |
758 | * a) the user don't want to check mediums global | 756 | * a) the user don't want to check mediums global |
759 | * b) the user wants to check but use the global options for it | 757 | * b) the user wants to check but use the global options for it |
760 | * c) the user wants to check it but not this medium | 758 | * c) the user wants to check it but not this medium |
761 | * d) the user wants to check and this medium as well | 759 | * d) the user wants to check and this medium as well |
762 | * | 760 | * |
763 | * In all cases we need to apply a different mimefilter to | 761 | * In all cases we need to apply a different mimefilter to |
764 | * the medium. | 762 | * the medium. |
765 | * a) mimefilter.isEmpty() we need to apply the responding filter | 763 | * a) mimefilter.isEmpty() we need to apply the responding filter |
766 | * either the global or the one on the medium | 764 | * either the global or the one on the medium |
767 | * | 765 | * |
768 | * b) mimefilter is set to an application we need to find out if the | 766 | * b) mimefilter is set to an application we need to find out if the |
769 | * mimetypes are included in the mime mask of the medium | 767 | * mimetypes are included in the mime mask of the medium |
770 | */ | 768 | */ |
771 | StorageInfo storage; | 769 | StorageInfo storage; |
772 | const QList<FileSystem> &fs = storage.fileSystems(); | 770 | const QList<FileSystem> &fs = storage.fileSystems(); |
773 | QListIterator<FileSystem> it ( fs ); | 771 | QListIterator<FileSystem> it ( fs ); |
774 | for ( ; it.current(); ++it ) { | 772 | for ( ; it.current(); ++it ) { |
775 | if ( (*it)->isRemovable() ) { // let's find out if we should search on it | 773 | if ( (*it)->isRemovable() ) { // let's find out if we should search on it |
776 | // this is a candidate look at the cf and see if we should search on it | 774 | // this is a candidate look at the cf and see if we should search on it |
777 | QString path = (*it)->path(); | 775 | QString path = (*it)->path(); |
778 | if( !checkStorage((*it)->path() + "/.opiestorage.cf" ) ) | 776 | if( !checkStorage((*it)->path() + "/.opiestorage.cf" ) ) |
779 | continue; | 777 | continue; |
780 | DocLnkSet ide( path, mimefilter ); | 778 | DocLnkSet ide( path, mimefilter ); |
781 | folder->appendFrom(ide); | 779 | folder->appendFrom(ide); |
782 | } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) { | 780 | } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) { |
783 | QString path = (*it)->path() + "/Documents"; | 781 | QString path = (*it)->path() + "/Documents"; |
784 | DocLnkSet ide( path, mimefilter ); | 782 | DocLnkSet ide( path, mimefilter ); |
785 | folder->appendFrom(ide); | 783 | folder->appendFrom(ide); |
786 | } | 784 | } |
787 | } | 785 | } |
788 | } | 786 | } |
789 | 787 | ||
790 | QStringList Global::languageList() | 788 | QStringList Global::languageList() |
791 | { | 789 | { |
792 | QString lang = getenv("LANG"); | 790 | QString lang = getenv("LANG"); |
793 | QStringList langs; | 791 | QStringList langs; |
794 | langs.append(lang); | 792 | langs.append(lang); |
795 | int i = lang.find("."); | 793 | int i = lang.find("."); |
796 | if ( i > 0 ) | 794 | if ( i > 0 ) |
797 | lang = lang.left( i ); | 795 | lang = lang.left( i ); |
798 | i = lang.find( "_" ); | 796 | i = lang.find( "_" ); |
799 | if ( i > 0 ) | 797 | if ( i > 0 ) |
800 | langs.append(lang.left(i)); | 798 | langs.append(lang.left(i)); |
801 | return langs; | 799 | return langs; |
802 | } | 800 | } |
803 | 801 | ||
804 | QStringList Global::helpPath() | 802 | QStringList Global::helpPath() |
805 | { | 803 | { |
806 | QStringList path; | 804 | QStringList path; |
807 | QStringList langs = Global::languageList(); | 805 | QStringList langs = Global::languageList(); |
808 | for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) { | 806 | for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) { |
809 | QString lang = *it; | 807 | QString lang = *it; |
810 | if ( !lang.isEmpty() ) | 808 | if ( !lang.isEmpty() ) |
811 | path += QPEApplication::qpeDir() + "/help/" + lang + "/html"; | 809 | path += QPEApplication::qpeDir() + "/help/" + lang + "/html"; |
812 | } | 810 | } |
813 | path += QPEApplication::qpeDir() + "/pics"; | 811 | path += QPEApplication::qpeDir() + "/pics"; |
814 | path += QPEApplication::qpeDir() + "/help/html"; | 812 | path += QPEApplication::qpeDir() + "/help/html"; |
815 | path += QPEApplication::qpeDir() + "/docs"; | 813 | path += QPEApplication::qpeDir() + "/docs"; |
816 | 814 | ||
817 | 815 | ||
818 | return path; | 816 | return path; |
819 | } | 817 | } |
820 | 818 | ||
821 | 819 | ||
822 | #include "global.moc" | 820 | #include "global.moc" |