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 | |
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 | |||
@@ -513,196 +513,194 @@ void Global::setDocument( QWidget* receiver, const QString& document ) | |||
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 | ||