summaryrefslogtreecommitdiff
authorsandman <sandman>2002-12-07 19:58:03 (UTC)
committer sandman <sandman>2002-12-07 19:58:03 (UTC)
commitd856a53635479f5ace72159aa513480ecd90bf1e (patch) (unidiff)
treeaba6aaa2cc9168ebd364308f37cdc9c4286c6703
parent09aa2b9a766e02e52ad64c0294e8b72e6fda8c85 (diff)
downloadopie-d856a53635479f5ace72159aa513480ecd90bf1e.zip
opie-d856a53635479f5ace72159aa513480ecd90bf1e.tar.gz
opie-d856a53635479f5ace72159aa513480ecd90bf1e.tar.bz2
- removed the libpreload stuff from global.cpp
- added qt_override.* which provides the same functionality as libpreload (the new -override patch for Qt/E is needed for this to work/compile) - changed qpeapplication a bit to accomodate the new interface
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/global.cpp16
-rw-r--r--library/library.pro7
-rw-r--r--library/qpeapplication.cpp40
-rw-r--r--library/qpeapplication.h2
-rw-r--r--library/qt_override.cpp166
-rw-r--r--library/qt_override_p.h21
6 files changed, 209 insertions, 43 deletions
diff --git a/library/global.cpp b/library/global.cpp
index 2162e02..d6ba84f 100644
--- a/library/global.cpp
+++ b/library/global.cpp
@@ -414,407 +414,393 @@ QWidget *Global::shutdown( bool )
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*/
422QWidget *Global::restart( bool ) 422QWidget *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*/
440void Global::showInputMethod() 440void 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*/
455void Global::hideInputMethod() 455void 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*/
466bool Global::isBuiltinCommand( const QString &name ) 466bool 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
478Global::Command* Global::builtin=0; 478Global::Command* Global::builtin=0;
479QGuardedPtr<QWidget> *Global::running=0; 479QGuardedPtr<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*/
490void Global::setBuiltinCommands( Command* list ) 490void 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*/
508void Global::setDocument( QWidget* receiver, const QString& document ) 508void 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*/
516bool Global::terminateBuiltin( const QString& n ) 516bool 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*/
532void Global::terminate( const AppLnk* app ) 532void 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*/
551void Global::invoke(const QString &c) 551void 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" );
608
609 QString newpre = QPEApplication::qpeDir ( ) + "/lib/libpreload.so";
610 if ( QFile::exists ( newpre )) {
611 if ( oldpre && oldpre [0] )
612 newpre = newpre + ":" + oldpre;
613 ::setenv ( "LD_PRELOAD", newpre. latin1( ), 1 );
614 qDebug ( "\nPRELOADING\n" );
615 }
616
617 if ( !::vfork() ) { 607 if ( !::vfork() ) {
618 for ( int fd = 3; fd < 100; fd++ ) 608 for ( int fd = 3; fd < 100; fd++ )
619 ::close( fd ); 609 ::close( fd );
620 ::setpgid( ::getpid(), ::getppid() ); 610 ::setpgid( ::getpid(), ::getppid() );
621 // Try bindir first, so that foo/bar works too 611 // Try bindir first, so that foo/bar works too
622 ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args ); 612 ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args );
623 ::execvp( args[0], (char * const *)args ); 613 ::execvp( args[0], (char * const *)args );
624 _exit( -1 ); 614 _exit( -1 );
625 } 615 }
626 if ( oldpre )
627 ::setenv ( "LD_PRELOAD", oldpre, 1 );
628 else
629 ::unsetenv ( "LD_PRELOAD" );
630 } 616 }
631 StartingAppList::add( list[0] ); 617 StartingAppList::add( list[0] );
632#endif //QT_NO_QWS_MULTIPROCESS 618#endif //QT_NO_QWS_MULTIPROCESS
633} 619}
634 620
635 621
636/*! 622/*!
637 Executes the application identfied by \a c, passing \a 623 Executes the application identfied by \a c, passing \a
638 document if it isn't null. 624 document if it isn't null.
639 625
640 Note that a better approach might be to send a QCop message to the 626 Note that a better approach might be to send a QCop message to the
641 application's QPE/Application/\e{appname} channel. 627 application's QPE/Application/\e{appname} channel.
642*/ 628*/
643void Global::execute( const QString &c, const QString& document ) 629void Global::execute( const QString &c, const QString& document )
644{ 630{
645 if ( qApp->type() != QApplication::GuiServer ) { 631 if ( qApp->type() != QApplication::GuiServer ) {
646 // ask the server to do the work 632 // ask the server to do the work
647#if !defined(QT_NO_COP) 633#if !defined(QT_NO_COP)
648 if ( document.isNull() ) { 634 if ( document.isNull() ) {
649 QCopEnvelope e( "QPE/System", "execute(QString)" ); 635 QCopEnvelope e( "QPE/System", "execute(QString)" );
650 e << c; 636 e << c;
651 } else { 637 } else {
652 QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); 638 QCopEnvelope e( "QPE/System", "execute(QString,QString)" );
653 e << c << document; 639 e << c << document;
654 } 640 }
655#endif 641#endif
656 return; 642 return;
657 } 643 }
658 644
659 // Attempt to execute the app using a builtin class for the app first 645 // Attempt to execute the app using a builtin class for the app first
660 // else try and find it in the bin directory 646 // else try and find it in the bin directory
661 if (builtin) { 647 if (builtin) {
662 for (int i = 0; builtin[i].file; i++) { 648 for (int i = 0; builtin[i].file; i++) {
663 if ( builtin[i].file == c ) { 649 if ( builtin[i].file == c ) {
664 if ( running[i] ) { 650 if ( running[i] ) {
665 if ( !document.isNull() && builtin[i].documentary ) 651 if ( !document.isNull() && builtin[i].documentary )
666 setDocument(running[i], document); 652 setDocument(running[i], document);
667 running[i]->raise(); 653 running[i]->raise();
668 running[i]->show(); 654 running[i]->show();
669 running[i]->setActiveWindow(); 655 running[i]->setActiveWindow();
670 } else { 656 } else {
671 running[i] = builtin[i].func( builtin[i].maximized ); 657 running[i] = builtin[i].func( builtin[i].maximized );
672 } 658 }
673#ifndef QT_NO_COP 659#ifndef QT_NO_COP
674 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 660 QCopEnvelope e("QPE/System", "notBusy(QString)" );
675 e << c; // that was quick ;-) 661 e << c; // that was quick ;-)
676#endif 662#endif
677 return; 663 return;
678 } 664 }
679 } 665 }
680 } 666 }
681 667
682 //Global::invoke(c, document); 668 //Global::invoke(c, document);
683 669
684 // Convert the command line in to a list of arguments 670 // Convert the command line in to a list of arguments
685 QStringList list = QStringList::split(QRegExp(" *"),c); 671 QStringList list = QStringList::split(QRegExp(" *"),c);
686 672
687#if !defined(QT_NO_COP) 673#if !defined(QT_NO_COP)
688 QString ap=list[0]; 674 QString ap=list[0];
689 675
690 qDebug("executing %s", ap.latin1() ); 676 qDebug("executing %s", ap.latin1() );
691 677
692 /* if need be, sending a qcop message will result in an invoke, see 678 /* if need be, sending a qcop message will result in an invoke, see
693 preceeding function */ 679 preceeding function */
694 invoke( ap ); 680 invoke( ap );
695 //{ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } 681 //{ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); }
696 if ( !document.isEmpty() ) { 682 if ( !document.isEmpty() ) {
697 QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" ); 683 QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" );
698 env << document; 684 env << document;
699 } 685 }
700#endif 686#endif
701} 687}
702 688
703/*! 689/*!
704 Returns the string \a s with the characters '\', '"', and '$' quoted 690 Returns the string \a s with the characters '\', '"', and '$' quoted
705 by a preceeding '\'. 691 by a preceeding '\'.
706 692
707 \sa stringQuote() 693 \sa stringQuote()
708*/ 694*/
709QString Global::shellQuote(const QString& s) 695QString Global::shellQuote(const QString& s)
710{ 696{
711 QString r="\""; 697 QString r="\"";
712 for (int i=0; i<(int)s.length(); i++) { 698 for (int i=0; i<(int)s.length(); i++) {
713 char c = s[i].latin1(); 699 char c = s[i].latin1();
714 switch (c) { 700 switch (c) {
715 case '\\': case '"': case '$': 701 case '\\': case '"': case '$':
716 r+="\\"; 702 r+="\\";
717 } 703 }
718 r += s[i]; 704 r += s[i];
719 } 705 }
720 r += "\""; 706 r += "\"";
721 return r; 707 return r;
722} 708}
723 709
724/*! 710/*!
725 Returns the string \a s with the characters '\' and '"' quoted by a 711 Returns the string \a s with the characters '\' and '"' quoted by a
726 preceeding '\'. 712 preceeding '\'.
727 713
728 \sa shellQuote() 714 \sa shellQuote()
729*/ 715*/
730QString Global::stringQuote(const QString& s) 716QString Global::stringQuote(const QString& s)
731{ 717{
732 QString r="\""; 718 QString r="\"";
733 for (int i=0; i<(int)s.length(); i++) { 719 for (int i=0; i<(int)s.length(); i++) {
734 char c = s[i].latin1(); 720 char c = s[i].latin1();
735 switch (c) { 721 switch (c) {
736 case '\\': case '"': 722 case '\\': case '"':
737 r+="\\"; 723 r+="\\";
738 } 724 }
739 r += s[i]; 725 r += s[i];
740 } 726 }
741 r += "\""; 727 r += "\"";
742 return r; 728 return r;
743} 729}
744 730
745/*! 731/*!
746 Finds all documents on the system's document directories which 732 Finds all documents on the system's document directories which
747 match the filter \a mimefilter, and appends the resulting DocLnk 733 match the filter \a mimefilter, and appends the resulting DocLnk
748 objects to \a folder. 734 objects to \a folder.
749*/ 735*/
750void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter) 736void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter)
751{ 737{
752 QString homedocs = QString(getenv("HOME")) + "/Documents"; 738 QString homedocs = QString(getenv("HOME")) + "/Documents";
753 DocLnkSet d(homedocs,mimefilter); 739 DocLnkSet d(homedocs,mimefilter);
754 folder->appendFrom(d); 740 folder->appendFrom(d);
755 /** let's do intellegint way of searching these files 741 /** let's do intellegint way of searching these files
756 * a) the user don't want to check mediums global 742 * a) the user don't want to check mediums global
757 * b) the user wants to check but use the global options for it 743 * b) the user wants to check but use the global options for it
758 * c) the user wants to check it but not this medium 744 * c) the user wants to check it but not this medium
759 * d) the user wants to check and this medium as well 745 * d) the user wants to check and this medium as well
760 * 746 *
761 * In all cases we need to apply a different mimefilter to 747 * In all cases we need to apply a different mimefilter to
762 * the medium. 748 * the medium.
763 * a) mimefilter.isEmpty() we need to apply the responding filter 749 * a) mimefilter.isEmpty() we need to apply the responding filter
764 * either the global or the one on the medium 750 * either the global or the one on the medium
765 * 751 *
766 * b) mimefilter is set to an application we need to find out if the 752 * b) mimefilter is set to an application we need to find out if the
767 * mimetypes are included in the mime mask of the medium 753 * mimetypes are included in the mime mask of the medium
768 */ 754 */
769 StorageInfo storage; 755 StorageInfo storage;
770 const QList<FileSystem> &fs = storage.fileSystems(); 756 const QList<FileSystem> &fs = storage.fileSystems();
771 QListIterator<FileSystem> it ( fs ); 757 QListIterator<FileSystem> it ( fs );
772 for ( ; it.current(); ++it ) { 758 for ( ; it.current(); ++it ) {
773 if ( (*it)->isRemovable() ) { // let's find out if we should search on it 759 if ( (*it)->isRemovable() ) { // let's find out if we should search on it
774 // this is a candidate look at the cf and see if we should search on it 760 // this is a candidate look at the cf and see if we should search on it
775 QString path = (*it)->path(); 761 QString path = (*it)->path();
776 if( !checkStorage((*it)->path() + "/.opiestorage.cf" ) ) 762 if( !checkStorage((*it)->path() + "/.opiestorage.cf" ) )
777 continue; 763 continue;
778 DocLnkSet ide( path, mimefilter ); 764 DocLnkSet ide( path, mimefilter );
779 folder->appendFrom(ide); 765 folder->appendFrom(ide);
780 } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) { 766 } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) {
781 QString path = (*it)->path() + "/Documents"; 767 QString path = (*it)->path() + "/Documents";
782 DocLnkSet ide( path, mimefilter ); 768 DocLnkSet ide( path, mimefilter );
783 folder->appendFrom(ide); 769 folder->appendFrom(ide);
784 } 770 }
785 } 771 }
786} 772}
787 773
788QStringList Global::languageList() 774QStringList Global::languageList()
789{ 775{
790 QString lang = getenv("LANG"); 776 QString lang = getenv("LANG");
791 QStringList langs; 777 QStringList langs;
792 langs.append(lang); 778 langs.append(lang);
793 int i = lang.find("."); 779 int i = lang.find(".");
794 if ( i > 0 ) 780 if ( i > 0 )
795 lang = lang.left( i ); 781 lang = lang.left( i );
796 i = lang.find( "_" ); 782 i = lang.find( "_" );
797 if ( i > 0 ) 783 if ( i > 0 )
798 langs.append(lang.left(i)); 784 langs.append(lang.left(i));
799 return langs; 785 return langs;
800} 786}
801 787
802QStringList Global::helpPath() 788QStringList Global::helpPath()
803{ 789{
804 QStringList path; 790 QStringList path;
805 QStringList langs = Global::languageList(); 791 QStringList langs = Global::languageList();
806 for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) { 792 for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) {
807 QString lang = *it; 793 QString lang = *it;
808 if ( !lang.isEmpty() ) 794 if ( !lang.isEmpty() )
809 path += QPEApplication::qpeDir() + "/help/" + lang + "/html"; 795 path += QPEApplication::qpeDir() + "/help/" + lang + "/html";
810 } 796 }
811 path += QPEApplication::qpeDir() + "/pics"; 797 path += QPEApplication::qpeDir() + "/pics";
812 path += QPEApplication::qpeDir() + "/help/html"; 798 path += QPEApplication::qpeDir() + "/help/html";
813 path += QPEApplication::qpeDir() + "/docs"; 799 path += QPEApplication::qpeDir() + "/docs";
814 800
815 801
816 return path; 802 return path;
817} 803}
818 804
819 805
820#include "global.moc" 806#include "global.moc"
diff --git a/library/library.pro b/library/library.pro
index 4a06550..d9538fb 100644
--- a/library/library.pro
+++ b/library/library.pro
@@ -1,143 +1,146 @@
1 TEMPLATE= lib 1 TEMPLATE= lib
2 CONFIG += qt warn_on release 2 CONFIG += qt warn_on release
3 HEADERS= calendar.h \ 3 HEADERS= calendar.h \
4 global.h \ 4 global.h \
5 resource.h \ 5 resource.h \
6 xmlreader.h \ 6 xmlreader.h \
7 mimetype.h \ 7 mimetype.h \
8 menubutton.h \ 8 menubutton.h \
9 network.h \ 9 network.h \
10 networkinterface.h \ 10 networkinterface.h \
11 filemanager.h \ 11 filemanager.h \
12 fontmanager.h \ 12 fontmanager.h \
13 qdawg.h \ 13 qdawg.h \
14 datebookmonth.h \ 14 datebookmonth.h \
15 fileselector.h \ 15 fileselector.h \
16 fileselector_p.h \ 16 fileselector_p.h \
17 imageedit.h \ 17 imageedit.h \
18 qcopenvelope_qws.h \ 18 qcopenvelope_qws.h \
19 qpedecoration_qws.h \ 19 qpedecoration_qws.h \
20 qpeapplication.h \ 20 qpeapplication.h \
21 qpestyle.h \ 21 qpestyle.h \
22 qpedialog.h \ 22 qpedialog.h \
23 lightstyle.h \ 23 lightstyle.h \
24 config.h \ 24 config.h \
25 applnk.h \ 25 applnk.h \
26 sound.h \ 26 sound.h \
27 tzselect.h \ 27 tzselect.h \
28 qmath.h \ 28 qmath.h \
29 datebookdb.h \ 29 datebookdb.h \
30 alarmserver.h \ 30 alarmserver.h \
31 process.h \ 31 process.h \
32 password.h \ 32 password.h \
33 timestring.h \ 33 timestring.h \
34 fontfactoryinterface.h \ 34 fontfactoryinterface.h \
35 fontdatabase.h \ 35 fontdatabase.h \
36 power.h \ 36 power.h \
37 storage.h \ 37 storage.h \
38 qpemessagebox.h \ 38 qpemessagebox.h \
39 timeconversion.h \ 39 timeconversion.h \
40 qpedebug.h \ 40 qpedebug.h \
41 qpemenubar.h \ 41 qpemenubar.h \
42 qpetoolbar.h \ 42 qpetoolbar.h \
43 backend/categories.h \ 43 backend/categories.h \
44 stringutil.h \ 44 stringutil.h \
45 backend/palmtoprecord.h \ 45 backend/palmtoprecord.h \
46 backend/task.h \ 46 backend/task.h \
47 backend/event.h \ 47 backend/event.h \
48 backend/contact.h\ 48 backend/contact.h\
49 categorymenu.h \ 49 categorymenu.h \
50 categoryedit_p.h \ 50 categoryedit_p.h \
51 categoryselect.h \ 51 categoryselect.h \
52 categorywidget.h \ 52 categorywidget.h \
53 ir.h \ 53 ir.h \
54 backend/vobject_p.h \ 54 backend/vobject_p.h \
55 findwidget_p.h \ 55 findwidget_p.h \
56 finddialog.h \ 56 finddialog.h \
57 lnkproperties.h \ 57 lnkproperties.h \
58 windowdecorationinterface.h \ 58 windowdecorationinterface.h \
59 textcodecinterface.h \ 59 textcodecinterface.h \
60 imagecodecinterface.h 60 imagecodecinterface.h \
61 qt_override_p.h
62
61 SOURCES= calendar.cpp \ 63 SOURCES= calendar.cpp \
62 global.cpp \ 64 global.cpp \
63 xmlreader.cpp \ 65 xmlreader.cpp \
64 mimetype.cpp \ 66 mimetype.cpp \
65 menubutton.cpp \ 67 menubutton.cpp \
66 network.cpp \ 68 network.cpp \
67 networkinterface.cpp \ 69 networkinterface.cpp \
68 filemanager.cpp \ 70 filemanager.cpp \
69 fontmanager.cpp \ 71 fontmanager.cpp \
70 qdawg.cpp \ 72 qdawg.cpp \
71 datebookmonth.cpp \ 73 datebookmonth.cpp \
72 fileselector.cpp \ 74 fileselector.cpp \
73 imageedit.cpp \ 75 imageedit.cpp \
74 resource.cpp \ 76 resource.cpp \
75 qpedecoration_qws.cpp \ 77 qpedecoration_qws.cpp \
76 qcopenvelope_qws.cpp \ 78 qcopenvelope_qws.cpp \
77 qpeapplication.cpp \ 79 qpeapplication.cpp \
78 qpestyle.cpp \ 80 qpestyle.cpp \
79 qpedialog.cpp \ 81 qpedialog.cpp \
80 lightstyle.cpp \ 82 lightstyle.cpp \
81 config.cpp \ 83 config.cpp \
82 applnk.cpp \ 84 applnk.cpp \
83 sound.cpp \ 85 sound.cpp \
84 tzselect.cpp \ 86 tzselect.cpp \
85 qmath.c \ 87 qmath.c \
86 datebookdb.cpp \ 88 datebookdb.cpp \
87 alarmserver.cpp \ 89 alarmserver.cpp \
88 password.cpp \ 90 password.cpp \
89 process.cpp \ 91 process.cpp \
90 process_unix.cpp \ 92 process_unix.cpp \
91 timestring.cpp \ 93 timestring.cpp \
92 fontdatabase.cpp \ 94 fontdatabase.cpp \
93 power.cpp \ 95 power.cpp \
94 storage.cpp \ 96 storage.cpp \
95 qpemessagebox.cpp \ 97 qpemessagebox.cpp \
96 backend/timeconversion.cpp \ 98 backend/timeconversion.cpp \
97 qpedebug.cpp \ 99 qpedebug.cpp \
98 qpemenubar.cpp \ 100 qpemenubar.cpp \
99 qpetoolbar.cpp \ 101 qpetoolbar.cpp \
100 backend/categories.cpp \ 102 backend/categories.cpp \
101 backend/stringutil.cpp \ 103 backend/stringutil.cpp \
102 backend/palmtoprecord.cpp \ 104 backend/palmtoprecord.cpp \
103 backend/task.cpp \ 105 backend/task.cpp \
104 backend/event.cpp \ 106 backend/event.cpp \
105 backend/contact.cpp \ 107 backend/contact.cpp \
106 categorymenu.cpp \ 108 categorymenu.cpp \
107 categoryedit_p.cpp \ 109 categoryedit_p.cpp \
108 categoryselect.cpp \ 110 categoryselect.cpp \
109 categorywidget.cpp \ 111 categorywidget.cpp \
110 ir.cpp \ 112 ir.cpp \
111 backend/vcc_yacc.cpp \ 113 backend/vcc_yacc.cpp \
112 backend/vobject.cpp \ 114 backend/vobject.cpp \
113 findwidget_p.cpp \ 115 findwidget_p.cpp \
114 finddialog.cpp \ 116 finddialog.cpp \
115 lnkproperties.cpp 117 lnkproperties.cpp \
118 qt_override.cpp
116 119
117# Qt 3 compatibility 120# Qt 3 compatibility
118HEADERS += quuid.h qcom.h qlibrary.h qlibrary_p.h 121HEADERS += quuid.h qcom.h qlibrary.h qlibrary_p.h
119SOURCES += quuid.cpp qlibrary.cpp qlibrary_unix.cpp 122SOURCES += quuid.cpp qlibrary.cpp qlibrary_unix.cpp
120INCLUDEPATH += $(OPIEDIR)/include backend 123INCLUDEPATH += $(OPIEDIR)/include backend
121 LIBS += -ldl -lcrypt -lm 124 LIBS += -ldl -lcrypt -lm
122INTERFACES = passwordbase_p.ui categoryeditbase_p.ui findwidgetbase_p.ui lnkpropertiesbase_p.ui 125INTERFACES = passwordbase_p.ui categoryeditbase_p.ui findwidgetbase_p.ui lnkpropertiesbase_p.ui
123 TARGET = qpe 126 TARGET = qpe
124 DESTDIR = $(QTDIR)/lib$(PROJMAK) 127 DESTDIR = $(QTDIR)/lib$(PROJMAK)
125# This is set by configure$(OPIEDIR). 128# This is set by configure$(OPIEDIR).
126 VERSION = 1.5.0.1 129 VERSION = 1.5.0.1
127 130
128TRANSLATIONS = ../i18n/de/libqpe.ts \ 131TRANSLATIONS = ../i18n/de/libqpe.ts \
129 ../i18n/en/libqpe.ts \ 132 ../i18n/en/libqpe.ts \
130 ../i18n/es/libqpe.ts \ 133 ../i18n/es/libqpe.ts \
131 ../i18n/fr/libqpe.ts \ 134 ../i18n/fr/libqpe.ts \
132 ../i18n/hu/libqpe.ts \ 135 ../i18n/hu/libqpe.ts \
133 ../i18n/ja/libqpe.ts \ 136 ../i18n/ja/libqpe.ts \
134 ../i18n/ko/libqpe.ts \ 137 ../i18n/ko/libqpe.ts \
135 ../i18n/no/libqpe.ts \ 138 ../i18n/no/libqpe.ts \
136 ../i18n/pl/libqpe.ts \ 139 ../i18n/pl/libqpe.ts \
137 ../i18n/pt/libqpe.ts \ 140 ../i18n/pt/libqpe.ts \
138 ../i18n/pt_BR/libqpe.ts \ 141 ../i18n/pt_BR/libqpe.ts \
139 ../i18n/sl/libqpe.ts \ 142 ../i18n/sl/libqpe.ts \
140 ../i18n/zh_CN/libqpe.ts \ 143 ../i18n/zh_CN/libqpe.ts \
141 ../i18n/it/libqpe.ts \ 144 ../i18n/it/libqpe.ts \
142 ../i18n/zh_TW/libqpe.ts \ 145 ../i18n/zh_TW/libqpe.ts \
143 ../i18n/da/libqpe.ts 146 ../i18n/da/libqpe.ts
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 7cbda92..4c93111 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,280 +1,282 @@
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** $Id$ 19** $Id$
20** 20**
21**********************************************************************/ 21**********************************************************************/
22#define QTOPIA_INTERNAL_LANGLIST 22#define QTOPIA_INTERNAL_LANGLIST
23#include <stdlib.h> 23#include <stdlib.h>
24#include <unistd.h> 24#include <unistd.h>
25#include <linux/limits.h> // needed for some toolchains (PATH_MAX) 25#include <linux/limits.h> // needed for some toolchains (PATH_MAX)
26#include <qfile.h> 26#include <qfile.h>
27#ifdef Q_WS_QWS 27#ifdef Q_WS_QWS
28#ifndef QT_NO_COP 28#ifndef QT_NO_COP
29#if QT_VERSION <= 231 29#if QT_VERSION <= 231
30#define private public 30#define private public
31#define sendLocally processEvent 31#define sendLocally processEvent
32#include "qcopenvelope_qws.h" 32#include "qcopenvelope_qws.h"
33#undef private 33#undef private
34#else 34#else
35#include "qcopenvelope_qws.h" 35#include "qcopenvelope_qws.h"
36#endif 36#endif
37#endif 37#endif
38#include <qwindowsystem_qws.h> 38#include <qwindowsystem_qws.h>
39#endif 39#endif
40#include <qtextstream.h> 40#include <qtextstream.h>
41#include <qpalette.h> 41#include <qpalette.h>
42#include <qbuffer.h> 42#include <qbuffer.h>
43#include <qptrdict.h> 43#include <qptrdict.h>
44#include <qregexp.h> 44#include <qregexp.h>
45#include <qdir.h> 45#include <qdir.h>
46#include <qlabel.h> 46#include <qlabel.h>
47#include <qdialog.h> 47#include <qdialog.h>
48#include <qdragobject.h> 48#include <qdragobject.h>
49#include <qtextcodec.h> 49#include <qtextcodec.h>
50#include <qevent.h> 50#include <qevent.h>
51#include <qtooltip.h> 51#include <qtooltip.h>
52#include <qsignal.h> 52#include <qsignal.h>
53#include "qpeapplication.h" 53#include "qpeapplication.h"
54#include "qpestyle.h" 54#include "qpestyle.h"
55#include "styleinterface.h" 55#include "styleinterface.h"
56#if QT_VERSION >= 300 56#if QT_VERSION >= 300
57#include <qstylefactory.h> 57#include <qstylefactory.h>
58#else 58#else
59#include <qplatinumstyle.h> 59#include <qplatinumstyle.h>
60#include <qwindowsstyle.h> 60#include <qwindowsstyle.h>
61#include <qmotifstyle.h> 61#include <qmotifstyle.h>
62#include <qmotifplusstyle.h> 62#include <qmotifplusstyle.h>
63#include "lightstyle.h" 63#include "lightstyle.h"
64 64
65#include <qpe/qlibrary.h> 65#include <qpe/qlibrary.h>
66#endif 66#endif
67#include "global.h" 67#include "global.h"
68#include "resource.h" 68#include "resource.h"
69#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 69#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
70#include "qutfcodec.h" 70#include "qutfcodec.h"
71#endif 71#endif
72#include "config.h" 72#include "config.h"
73#include "network.h" 73#include "network.h"
74#ifdef QWS 74#ifdef QWS
75#include "fontmanager.h" 75#include "fontmanager.h"
76#endif 76#endif
77 77
78#include "alarmserver.h" 78#include "alarmserver.h"
79#include "applnk.h" 79#include "applnk.h"
80#include "qpemenubar.h" 80#include "qpemenubar.h"
81#include "textcodecinterface.h" 81#include "textcodecinterface.h"
82#include "imagecodecinterface.h" 82#include "imagecodecinterface.h"
83 83
84#include <unistd.h> 84#include <unistd.h>
85#include <sys/file.h> 85#include <sys/file.h>
86#include <sys/ioctl.h> 86#include <sys/ioctl.h>
87#include <sys/soundcard.h> 87#include <sys/soundcard.h>
88 88
89#include "qt_override_p.h"
90
89 91
90class QPEApplicationData 92class QPEApplicationData
91{ 93{
92public: 94public:
93 QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ), 95 QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ),
94 kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ), 96 kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ),
95 forceshow( FALSE ), nomaximize( FALSE ), qpe_main_widget( 0 ), 97 forceshow( FALSE ), nomaximize( FALSE ), qpe_main_widget( 0 ),
96 keep_running( TRUE ) 98 keep_running( TRUE )
97 { 99 {
98 qcopq.setAutoDelete( TRUE ); 100 qcopq.setAutoDelete( TRUE );
99 } 101 }
100 102
101 int presstimer; 103 int presstimer;
102 QWidget* presswidget; 104 QWidget* presswidget;
103 QPoint presspos; 105 QPoint presspos;
104bool rightpressed : 106bool rightpressed :
105 1; // AEH why not use uint foobar :1; if it's tt style -zecke 107 1; // AEH why not use uint foobar :1; if it's tt style -zecke
106 int kbgrabber; 108 int kbgrabber;
107bool kbregrab : 109bool kbregrab :
108 1; 110 1;
109bool notbusysent : 111bool notbusysent :
110 1; 112 1;
111 QString appName; 113 QString appName;
112 struct QCopRec 114 struct QCopRec
113 { 115 {
114 QCopRec( const QCString &ch, const QCString &msg, 116 QCopRec( const QCString &ch, const QCString &msg,
115 const QByteArray &d ) : 117 const QByteArray &d ) :
116 channel( ch ), message( msg ), data( d ) 118 channel( ch ), message( msg ), data( d )
117 { } 119 { }
118 120
119 QCString channel; 121 QCString channel;
120 QCString message; 122 QCString message;
121 QByteArray data; 123 QByteArray data;
122 }; 124 };
123bool preloaded : 125bool preloaded :
124 1; 126 1;
125bool forceshow : 127bool forceshow :
126 1; 128 1;
127bool nomaximize : 129bool nomaximize :
128 1; 130 1;
129 QWidget* qpe_main_widget; 131 QWidget* qpe_main_widget;
130bool keep_running : 132bool keep_running :
131 1; 133 1;
132 QList<QCopRec> qcopq; 134 QList<QCopRec> qcopq;
133 135
134 void enqueueQCop( const QCString &ch, const QCString &msg, 136 void enqueueQCop( const QCString &ch, const QCString &msg,
135 const QByteArray &data ) 137 const QByteArray &data )
136 { 138 {
137 qcopq.append( new QCopRec( ch, msg, data ) ); 139 qcopq.append( new QCopRec( ch, msg, data ) );
138 } 140 }
139 void sendQCopQ() 141 void sendQCopQ()
140 { 142 {
141 QCopRec * r; 143 QCopRec * r;
142#ifndef QT_NO_COP 144#ifndef QT_NO_COP
143 145
144 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it ) 146 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it )
145 QCopChannel::sendLocally( r->channel, r->message, r->data ); 147 QCopChannel::sendLocally( r->channel, r->message, r->data );
146#endif 148#endif
147 149
148 qcopq.clear(); 150 qcopq.clear();
149 } 151 }
150 static void show_mx(QWidget* mw, bool nomaximize) 152 static void show_mx(QWidget* mw, bool nomaximize)
151 { 153 {
152 if ( mw->layout() && mw->inherits("QDialog") ) { 154 if ( mw->layout() && mw->inherits("QDialog") ) {
153 QPEApplication::showDialog((QDialog*)mw, nomaximize); 155 QPEApplication::showDialog((QDialog*)mw, nomaximize);
154 } 156 }
155 else { 157 else {
156#ifdef Q_WS_QWS 158#ifdef Q_WS_QWS
157 if ( !nomaximize ) 159 if ( !nomaximize )
158 mw->showMaximized(); 160 mw->showMaximized();
159 else 161 else
160#endif 162#endif
161 163
162 mw->show(); 164 mw->show();
163 } 165 }
164 } 166 }
165 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) 167 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
166 { 168 {
167 /* 169 /*
168 // This works but disable it for now until it is safe to apply 170 // This works but disable it for now until it is safe to apply
169 // What is does is scan the .desktop files of all the apps for 171 // What is does is scan the .desktop files of all the apps for
170 // the applnk that has the corresponding argv[0] as this program 172 // the applnk that has the corresponding argv[0] as this program
171 // then it uses the name stored in the .desktop file as the caption 173 // then it uses the name stored in the .desktop file as the caption
172 // for the main widget. This saves duplicating translations for 174 // for the main widget. This saves duplicating translations for
173 // the app name in the program and in the .desktop files. 175 // the app name in the program and in the .desktop files.
174 176
175 AppLnkSet apps( appsPath ); 177 AppLnkSet apps( appsPath );
176 178
177 QList<AppLnk> appsList = apps.children(); 179 QList<AppLnk> appsList = apps.children();
178 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { 180 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
179 if ( (*it)->exec() == appName ) { 181 if ( (*it)->exec() == appName ) {
180 mw->setCaption( (*it)->name() ); 182 mw->setCaption( (*it)->name() );
181 return TRUE; 183 return TRUE;
182 } 184 }
183 } 185 }
184 */ 186 */
185 return FALSE; 187 return FALSE;
186 } 188 }
187 189
188 190
189 void show(QWidget* mw, bool nomax) 191 void show(QWidget* mw, bool nomax)
190 { 192 {
191 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); 193 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" );
192 nomaximize = nomax; 194 nomaximize = nomax;
193 qpe_main_widget = mw; 195 qpe_main_widget = mw;
194#ifndef QT_NO_COP 196#ifndef QT_NO_COP
195 197
196 sendQCopQ(); 198 sendQCopQ();
197#endif 199#endif
198 200
199 if ( preloaded ) { 201 if ( preloaded ) {
200 if (forceshow) 202 if (forceshow)
201 show_mx(mw, nomax); 203 show_mx(mw, nomax);
202 } 204 }
203 else if ( keep_running ) { 205 else if ( keep_running ) {
204 show_mx(mw, nomax); 206 show_mx(mw, nomax);
205 } 207 }
206 } 208 }
207 209
208 void loadTextCodecs() 210 void loadTextCodecs()
209 { 211 {
210 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; 212 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs";
211 QDir dir( path, "lib*.so" ); 213 QDir dir( path, "lib*.so" );
212 QStringList list = dir.entryList(); 214 QStringList list = dir.entryList();
213 QStringList::Iterator it; 215 QStringList::Iterator it;
214 for ( it = list.begin(); it != list.end(); ++it ) { 216 for ( it = list.begin(); it != list.end(); ++it ) {
215 TextCodecInterface *iface = 0; 217 TextCodecInterface *iface = 0;
216 QLibrary *lib = new QLibrary( path + "/" + *it ); 218 QLibrary *lib = new QLibrary( path + "/" + *it );
217 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 219 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
218 QValueList<int> mibs = iface->mibEnums(); 220 QValueList<int> mibs = iface->mibEnums();
219 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { 221 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) {
220 (void)iface->createForMib(*i); 222 (void)iface->createForMib(*i);
221 // ### it exists now; need to remember if we can delete it 223 // ### it exists now; need to remember if we can delete it
222 } 224 }
223 } 225 }
224 else { 226 else {
225 lib->unload(); 227 lib->unload();
226 delete lib; 228 delete lib;
227 } 229 }
228 } 230 }
229 } 231 }
230 232
231 void loadImageCodecs() 233 void loadImageCodecs()
232 { 234 {
233 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 235 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
234 QDir dir( path, "lib*.so" ); 236 QDir dir( path, "lib*.so" );
235 QStringList list = dir.entryList(); 237 QStringList list = dir.entryList();
236 QStringList::Iterator it; 238 QStringList::Iterator it;
237 for ( it = list.begin(); it != list.end(); ++it ) { 239 for ( it = list.begin(); it != list.end(); ++it ) {
238 ImageCodecInterface *iface = 0; 240 ImageCodecInterface *iface = 0;
239 QLibrary *lib = new QLibrary( path + "/" + *it ); 241 QLibrary *lib = new QLibrary( path + "/" + *it );
240 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 242 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
241 QStringList formats = iface->keys(); 243 QStringList formats = iface->keys();
242 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { 244 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) {
243 (void)iface->installIOHandler(*i); 245 (void)iface->installIOHandler(*i);
244 // ### it exists now; need to remember if we can delete it 246 // ### it exists now; need to remember if we can delete it
245 } 247 }
246 } 248 }
247 else { 249 else {
248 lib->unload(); 250 lib->unload();
249 delete lib; 251 delete lib;
250 } 252 }
251 } 253 }
252 } 254 }
253 QString styleName; 255 QString styleName;
254 QString decorationName; 256 QString decorationName;
255}; 257};
256 258
257class ResourceMimeFactory : public QMimeSourceFactory 259class ResourceMimeFactory : public QMimeSourceFactory
258{ 260{
259public: 261public:
260 ResourceMimeFactory() 262 ResourceMimeFactory()
261 { 263 {
262 setFilePath( Global::helpPath() ); 264 setFilePath( Global::helpPath() );
263 setExtensionType( "html", "text/html;charset=UTF-8" ); 265 setExtensionType( "html", "text/html;charset=UTF-8" );
264 } 266 }
265 267
266 const QMimeSource* data( const QString& abs_name ) const 268 const QMimeSource* data( const QString& abs_name ) const
267 { 269 {
268 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 270 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
269 if ( !r ) { 271 if ( !r ) {
270 int sl = abs_name.length(); 272 int sl = abs_name.length();
271 do { 273 do {
272 sl = abs_name.findRev( '/', sl - 1 ); 274 sl = abs_name.findRev( '/', sl - 1 );
273 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 275 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
274 int dot = name.findRev( '.' ); 276 int dot = name.findRev( '.' );
275 if ( dot >= 0 ) 277 if ( dot >= 0 )
276 name = name.left( dot ); 278 name = name.left( dot );
277 QImage img = Resource::loadImage( name ); 279 QImage img = Resource::loadImage( name );
278 if ( !img.isNull() ) 280 if ( !img.isNull() )
279 r = new QImageDrag( img ); 281 r = new QImageDrag( img );
280 } 282 }
@@ -710,483 +712,465 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e )
710 break; 712 break;
711 } 713 }
712 } 714 }
713 if ( e->type == QWSEvent::Key ) { 715 if ( e->type == QWSEvent::Key ) {
714 if ( d->kbgrabber == 1 ) 716 if ( d->kbgrabber == 1 )
715 return TRUE; 717 return TRUE;
716 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 718 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
717 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 719 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
718 // Use special "OK" key to press "OK" on top level widgets 720 // Use special "OK" key to press "OK" on top level widgets
719 QWidget * active = activeWindow(); 721 QWidget * active = activeWindow();
720 QWidget *popup = 0; 722 QWidget *popup = 0;
721 if ( active && active->isPopup() ) { 723 if ( active && active->isPopup() ) {
722 popup = active; 724 popup = active;
723 active = active->parentWidget(); 725 active = active->parentWidget();
724 } 726 }
725 if ( active && ( int ) active->winId() == ke->simpleData.window && 727 if ( active && ( int ) active->winId() == ke->simpleData.window &&
726 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 728 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
727 if ( ke->simpleData.is_press ) { 729 if ( ke->simpleData.is_press ) {
728 if ( popup ) 730 if ( popup )
729 popup->close(); 731 popup->close();
730 if ( active->inherits( "QDialog" ) ) { 732 if ( active->inherits( "QDialog" ) ) {
731 HackDialog * d = ( HackDialog * ) active; 733 HackDialog * d = ( HackDialog * ) active;
732 d->acceptIt(); 734 d->acceptIt();
733 return TRUE; 735 return TRUE;
734 } 736 }
735 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 737 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
736 QSignal s; 738 QSignal s;
737 s.connect( active, SLOT( accept() ) ); 739 s.connect( active, SLOT( accept() ) );
738 s.activate(); 740 s.activate();
739 } 741 }
740 else { 742 else {
741 // do the same as with the select key: Map to the default action of the widget: 743 // do the same as with the select key: Map to the default action of the widget:
742 mapToDefaultAction( ke, Qt::Key_Return ); 744 mapToDefaultAction( ke, Qt::Key_Return );
743 } 745 }
744 } 746 }
745 } 747 }
746 } 748 }
747 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 749 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
748 // Use special "select" key to do whatever default action a widget has 750 // Use special "select" key to do whatever default action a widget has
749 mapToDefaultAction( ke, Qt::Key_Space ); 751 mapToDefaultAction( ke, Qt::Key_Space );
750 } 752 }
751 else if ( ke->simpleData.keycode == Qt::Key_Escape && 753 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
752 ke->simpleData.is_press ) { 754 ke->simpleData.is_press ) {
753 // Escape key closes app if focus on toplevel 755 // Escape key closes app if focus on toplevel
754 QWidget * active = activeWindow(); 756 QWidget * active = activeWindow();
755 if ( active && active->testWFlags( WType_TopLevel ) && 757 if ( active && active->testWFlags( WType_TopLevel ) &&
756 ( int ) active->winId() == ke->simpleData.window && 758 ( int ) active->winId() == ke->simpleData.window &&
757 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 759 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
758 if ( active->inherits( "QDialog" ) ) { 760 if ( active->inherits( "QDialog" ) ) {
759 HackDialog * d = ( HackDialog * ) active; 761 HackDialog * d = ( HackDialog * ) active;
760 d->rejectIt(); 762 d->rejectIt();
761 return TRUE; 763 return TRUE;
762 } 764 }
763 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 765 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
764 active->close(); 766 active->close();
765 } 767 }
766 } 768 }
767 } 769 }
768 770
769#if QT_VERSION < 231 771#if QT_VERSION < 231
770 // Filter out the F4/Launcher key from apps 772 // Filter out the F4/Launcher key from apps
771 // ### The launcher key may not always be F4 on all devices 773 // ### The launcher key may not always be F4 on all devices
772 if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 ) 774 if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 )
773 return TRUE; 775 return TRUE;
774#endif 776#endif
775 777
776 } 778 }
777 if ( e->type == QWSEvent::Focus ) { 779 if ( e->type == QWSEvent::Focus ) {
778 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 780 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
779 QWidget* nfw = QWidget::find( e->window() ); 781 QWidget* nfw = QWidget::find( e->window() );
780 if ( !fe->simpleData.get_focus ) { 782 if ( !fe->simpleData.get_focus ) {
781 QWidget * active = activeWindow(); 783 QWidget * active = activeWindow();
782 while ( active && active->isPopup() ) { 784 while ( active && active->isPopup() ) {
783 active->close(); 785 active->close();
784 active = activeWindow(); 786 active = activeWindow();
785 } 787 }
786 if ( !nfw && d->kbgrabber == 2 ) { 788 if ( !nfw && d->kbgrabber == 2 ) {
787 ungrabKeyboard(); 789 ungrabKeyboard();
788 d->kbregrab = TRUE; // want kb back when we're active 790 d->kbregrab = TRUE; // want kb back when we're active
789 } 791 }
790 } 792 }
791 else { 793 else {
792 // make sure our modal widget is ALWAYS on top 794 // make sure our modal widget is ALWAYS on top
793 QWidget *topm = activeModalWidget(); 795 QWidget *topm = activeModalWidget();
794 if ( topm ) { 796 if ( topm ) {
795 topm->raise(); 797 topm->raise();
796 } 798 }
797 if ( d->kbregrab ) { 799 if ( d->kbregrab ) {
798 grabKeyboard(); 800 grabKeyboard();
799 d->kbregrab = FALSE; 801 d->kbregrab = FALSE;
800 } 802 }
801 } 803 }
802 if ( fe->simpleData.get_focus && inputMethodDict ) { 804 if ( fe->simpleData.get_focus && inputMethodDict ) {
803 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 805 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
804 if ( m == AlwaysOff ) 806 if ( m == AlwaysOff )
805 Global::hideInputMethod(); 807 Global::hideInputMethod();
806 if ( m == AlwaysOn ) 808 if ( m == AlwaysOn )
807 Global::showInputMethod(); 809 Global::showInputMethod();
808 } 810 }
809 } 811 }
810 return QApplication::qwsEventFilter( e ); 812 return QApplication::qwsEventFilter( e );
811} 813}
812#endif 814#endif
813 815
814/*! 816/*!
815 Destroys the QPEApplication. 817 Destroys the QPEApplication.
816*/ 818*/
817QPEApplication::~QPEApplication() 819QPEApplication::~QPEApplication()
818{ 820{
819 ungrabKeyboard(); 821 ungrabKeyboard();
820#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 822#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
821 // Need to delete QCopChannels early, since the display will 823 // Need to delete QCopChannels early, since the display will
822 // be gone by the time we get to ~QObject(). 824 // be gone by the time we get to ~QObject().
823 delete sysChannel; 825 delete sysChannel;
824 delete pidChannel; 826 delete pidChannel;
825#endif 827#endif
826 828
827 delete d; 829 delete d;
828} 830}
829 831
830/*! 832/*!
831 Returns <tt>$OPIEDIR/</tt>. 833 Returns <tt>$OPIEDIR/</tt>.
832*/ 834*/
833QString QPEApplication::qpeDir() 835QString QPEApplication::qpeDir()
834{ 836{
835 const char * base = getenv( "OPIEDIR" ); 837 const char * base = getenv( "OPIEDIR" );
836 if ( base ) 838 if ( base )
837 return QString( base ) + "/"; 839 return QString( base ) + "/";
838 840
839 return QString( "../" ); 841 return QString( "../" );
840} 842}
841 843
842/*! 844/*!
843 Returns the user's current Document directory. There is a trailing "/". 845 Returns the user's current Document directory. There is a trailing "/".
844 .. well, it does now,, and there's no trailing '/' 846 .. well, it does now,, and there's no trailing '/'
845*/ 847*/
846QString QPEApplication::documentDir() 848QString QPEApplication::documentDir()
847{ 849{
848 const char* base = getenv( "HOME"); 850 const char* base = getenv( "HOME");
849 if ( base ) 851 if ( base )
850 return QString( base ) + "/Documents"; 852 return QString( base ) + "/Documents";
851 853
852 return QString( "../Documents" ); 854 return QString( "../Documents" );
853} 855}
854 856
855static int deforient = -1; 857static int deforient = -1;
856 858
857/*! 859/*!
858 \internal 860 \internal
859*/ 861*/
860int QPEApplication::defaultRotation() 862int QPEApplication::defaultRotation()
861{ 863{
862 if ( deforient < 0 ) { 864 if ( deforient < 0 ) {
863 QString d = getenv( "QWS_DISPLAY" ); 865 QString d = getenv( "QWS_DISPLAY" );
864 if ( d.contains( "Rot90" ) ) { 866 if ( d.contains( "Rot90" ) ) {
865 deforient = 90; 867 deforient = 90;
866 } 868 }
867 else if ( d.contains( "Rot180" ) ) { 869 else if ( d.contains( "Rot180" ) ) {
868 deforient = 180; 870 deforient = 180;
869 } 871 }
870 else if ( d.contains( "Rot270" ) ) { 872 else if ( d.contains( "Rot270" ) ) {
871 deforient = 270; 873 deforient = 270;
872 } 874 }
873 else { 875 else {
874 deforient = 0; 876 deforient = 0;
875 } 877 }
876 } 878 }
877 return deforient; 879 return deforient;
878} 880}
879 881
880/*! 882/*!
881 \internal 883 \internal
882*/ 884*/
883void QPEApplication::setDefaultRotation( int r ) 885void QPEApplication::setDefaultRotation( int r )
884{ 886{
885 if ( qApp->type() == GuiServer ) { 887 if ( qApp->type() == GuiServer ) {
886 deforient = r; 888 deforient = r;
887 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 889 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
888 Config config("qpe"); 890 Config config("qpe");
889 config.setGroup( "Rotation" ); 891 config.setGroup( "Rotation" );
890 config.writeEntry( "Screen", getenv("QWS_DISPLAY") ); 892 config.writeEntry( "Screen", getenv("QWS_DISPLAY") );
891 } 893 }
892 else { 894 else {
893#ifndef QT_NO_COP 895#ifndef QT_NO_COP
894 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 896 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
895 e << r; 897 e << r;
896 } 898 }
897#endif 899#endif
898 900
899 } 901 }
900} 902}
901 903
902// exported to libpreload.so
903int opie_block_style = 0;
904 904
905/*! 905/*!
906 \internal 906 \internal
907*/ 907*/
908void QPEApplication::applyStyle() 908void QPEApplication::applyStyle()
909{ 909{
910 Config config( "qpe" ); 910 Config config( "qpe" );
911 config.setGroup( "Appearance" ); 911 config.setGroup( "Appearance" );
912 912
913 // don't block ourselves ... 913 // don't block ourselves ...
914 opie_block_style = 0; 914 Opie::force_appearance = 0;
915 915
916 916 static QString appname = Opie::binaryName ( );
917 static QString appname;
918
919 if ( appname. isNull ( )) {
920 char src [32];
921 char dst [PATH_MAX + 1];
922 ::sprintf ( src, "/proc/%d/exe", ::getpid ( ));
923 int l = ::readlink ( src, dst, PATH_MAX );
924 if ( l > 0 ) {
925 dst [l] = 0;
926 const char *b = ::strrchr ( dst, '/' );
927 appname = ( b ? b + 1 : dst );
928 }
929 else
930 appname = "";
931 }
932
933 917
934 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 918 QStringList ex = config. readListEntry ( "NoStyle", ';' );
935 int nostyle = 0; 919 int nostyle = 0;
936 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 920 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
937 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 921 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
938 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 922 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
939 break; 923 break;
940 } 924 }
941 } 925 }
942 926
943 // Widget style 927 // Widget style
944 QString style = config.readEntry( "Style", "Light" ); 928 QString style = config.readEntry( "Style", "Light" );
945 929
946 // don't set a custom style 930 // don't set a custom style
947 if ( nostyle & 0x01 ) 931 if ( nostyle & Opie::Force_Style )
948 style = "Light"; 932 style = "Light";
949 933
950 internalSetStyle ( style ); 934 internalSetStyle ( style );
951 935
952 // Colors 936 // Colors
953 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); 937 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) );
954 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); 938 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) );
955 QPalette pal( btncolor, bgcolor ); 939 QPalette pal( btncolor, bgcolor );
956 QString color = config.readEntry( "Highlight", "#800000" ); 940 QString color = config.readEntry( "Highlight", "#800000" );
957 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 941 pal.setColor( QColorGroup::Highlight, QColor( color ) );
958 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 942 color = config.readEntry( "HighlightedText", "#FFFFFF" );
959 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 943 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
960 color = config.readEntry( "Text", "#000000" ); 944 color = config.readEntry( "Text", "#000000" );
961 pal.setColor( QColorGroup::Text, QColor( color ) ); 945 pal.setColor( QColorGroup::Text, QColor( color ) );
962 color = config.readEntry( "ButtonText", "#000000" ); 946 color = config.readEntry( "ButtonText", "#000000" );
963 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 947 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
964 color = config.readEntry( "Base", "#FFFFFF" ); 948 color = config.readEntry( "Base", "#FFFFFF" );
965 pal.setColor( QColorGroup::Base, QColor( color ) ); 949 pal.setColor( QColorGroup::Base, QColor( color ) );
966 950
967 pal.setColor( QPalette::Disabled, QColorGroup::Text, 951 pal.setColor( QPalette::Disabled, QColorGroup::Text,
968 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 952 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
969 953
970 setPalette( pal, TRUE ); 954 setPalette( pal, TRUE );
971 955
972 // Window Decoration 956 // Window Decoration
973 QString dec = config.readEntry( "Decoration", "Qtopia" ); 957 QString dec = config.readEntry( "Decoration", "Qtopia" );
974 958
975 // don't set a custom deco 959 // don't set a custom deco
976 if ( nostyle & 0x04 ) 960 if ( nostyle & Opie::Force_Decoration )
977 dec = ""; 961 dec = "";
978 962
979 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle); 963 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
980 964
981 if ( dec != d->decorationName ) { 965 if ( dec != d->decorationName ) {
982 qwsSetDecoration( new QPEDecoration( dec ) ); 966 qwsSetDecoration( new QPEDecoration( dec ) );
983 d->decorationName = dec; 967 d->decorationName = dec;
984 } 968 }
985 969
986 // Font 970 // Font
987 QString ff = config.readEntry( "FontFamily", font().family() ); 971 QString ff = config.readEntry( "FontFamily", font().family() );
988 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 972 int fs = config.readNumEntry( "FontSize", font().pointSize() );
989 973
990 // don't set a custom font 974 // don't set a custom font
991 if ( nostyle & 0x02 ) { 975 if ( nostyle & Opie::Force_Font ) {
992 ff = "Helvetica"; 976 ff = "Helvetica";
993 fs = 10; 977 fs = 10;
994 } 978 }
995 979
996 setFont ( QFont ( ff, fs ), true ); 980 setFont ( QFont ( ff, fs ), true );
997 981
998 // revert to global blocking policy ... 982 // revert to global blocking policy ...
999 opie_block_style = config. readBoolEntry ( "ForceStyle", false ) ? 0xff : 0x00; 983 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None;
1000 opie_block_style -= nostyle; 984 Opie::force_appearance &= ~nostyle;
1001} 985}
1002 986
1003void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 987void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1004{ 988{
1005#ifdef Q_WS_QWS 989#ifdef Q_WS_QWS
1006 QDataStream stream( data, IO_ReadOnly ); 990 QDataStream stream( data, IO_ReadOnly );
1007 if ( msg == "applyStyle()" ) { 991 if ( msg == "applyStyle()" ) {
1008 applyStyle(); 992 applyStyle();
1009 } 993 }
1010 else if ( msg == "setDefaultRotation(int)" ) { 994 else if ( msg == "setDefaultRotation(int)" ) {
1011 if ( type() == GuiServer ) { 995 if ( type() == GuiServer ) {
1012 int r; 996 int r;
1013 stream >> r; 997 stream >> r;
1014 setDefaultRotation( r ); 998 setDefaultRotation( r );
1015 } 999 }
1016 } 1000 }
1017 else if ( msg == "shutdown()" ) { 1001 else if ( msg == "shutdown()" ) {
1018 if ( type() == GuiServer ) 1002 if ( type() == GuiServer )
1019 shutdown(); 1003 shutdown();
1020 } 1004 }
1021 else if ( msg == "quit()" ) { 1005 else if ( msg == "quit()" ) {
1022 if ( type() != GuiServer ) 1006 if ( type() != GuiServer )
1023 tryQuit(); 1007 tryQuit();
1024 } 1008 }
1025 else if ( msg == "forceQuit()" ) { 1009 else if ( msg == "forceQuit()" ) {
1026 if ( type() != GuiServer ) 1010 if ( type() != GuiServer )
1027 quit(); 1011 quit();
1028 } 1012 }
1029 else if ( msg == "restart()" ) { 1013 else if ( msg == "restart()" ) {
1030 if ( type() == GuiServer ) 1014 if ( type() == GuiServer )
1031 restart(); 1015 restart();
1032 } 1016 }
1033 else if ( msg == "grabKeyboard(QString)" ) { 1017 else if ( msg == "grabKeyboard(QString)" ) {
1034 QString who; 1018 QString who;
1035 stream >> who; 1019 stream >> who;
1036 if ( who.isEmpty() ) 1020 if ( who.isEmpty() )
1037 d->kbgrabber = 0; 1021 d->kbgrabber = 0;
1038 else if ( who != d->appName ) 1022 else if ( who != d->appName )
1039 d->kbgrabber = 1; 1023 d->kbgrabber = 1;
1040 else 1024 else
1041 d->kbgrabber = 2; 1025 d->kbgrabber = 2;
1042 } 1026 }
1043 else if ( msg == "language(QString)" ) { 1027 else if ( msg == "language(QString)" ) {
1044 if ( type() == GuiServer ) { 1028 if ( type() == GuiServer ) {
1045 QString l; 1029 QString l;
1046 stream >> l; 1030 stream >> l;
1047 QString cl = getenv( "LANG" ); 1031 QString cl = getenv( "LANG" );
1048 if ( cl != l ) { 1032 if ( cl != l ) {
1049 if ( l.isNull() ) 1033 if ( l.isNull() )
1050 unsetenv( "LANG" ); 1034 unsetenv( "LANG" );
1051 else 1035 else
1052 setenv( "LANG", l.latin1(), 1 ); 1036 setenv( "LANG", l.latin1(), 1 );
1053 restart(); 1037 restart();
1054 } 1038 }
1055 } 1039 }
1056 } 1040 }
1057 else if ( msg == "timeChange(QString)" ) { 1041 else if ( msg == "timeChange(QString)" ) {
1058 QString t; 1042 QString t;
1059 stream >> t; 1043 stream >> t;
1060 if ( t.isNull() ) 1044 if ( t.isNull() )
1061 unsetenv( "TZ" ); 1045 unsetenv( "TZ" );
1062 else 1046 else
1063 setenv( "TZ", t.latin1(), 1 ); 1047 setenv( "TZ", t.latin1(), 1 );
1064 // emit the signal so everyone else knows... 1048 // emit the signal so everyone else knows...
1065 emit timeChanged(); 1049 emit timeChanged();
1066 } 1050 }
1067 else if ( msg == "execute(QString)" ) { 1051 else if ( msg == "execute(QString)" ) {
1068 if ( type() == GuiServer ) { 1052 if ( type() == GuiServer ) {
1069 QString t; 1053 QString t;
1070 stream >> t; 1054 stream >> t;
1071 Global::execute( t ); 1055 Global::execute( t );
1072 } 1056 }
1073 } 1057 }
1074 else if ( msg == "execute(QString,QString)" ) { 1058 else if ( msg == "execute(QString,QString)" ) {
1075 if ( type() == GuiServer ) { 1059 if ( type() == GuiServer ) {
1076 QString t, d; 1060 QString t, d;
1077 stream >> t >> d; 1061 stream >> t >> d;
1078 Global::execute( t, d ); 1062 Global::execute( t, d );
1079 } 1063 }
1080 } 1064 }
1081 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1065 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1082 if ( type() == GuiServer ) { 1066 if ( type() == GuiServer ) {
1083 QDateTime when; 1067 QDateTime when;
1084 QCString channel, message; 1068 QCString channel, message;
1085 int data; 1069 int data;
1086 stream >> when >> channel >> message >> data; 1070 stream >> when >> channel >> message >> data;
1087 AlarmServer::addAlarm( when, channel, message, data ); 1071 AlarmServer::addAlarm( when, channel, message, data );
1088 } 1072 }
1089 } 1073 }
1090 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1074 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1091 if ( type() == GuiServer ) { 1075 if ( type() == GuiServer ) {
1092 QDateTime when; 1076 QDateTime when;
1093 QCString channel, message; 1077 QCString channel, message;
1094 int data; 1078 int data;
1095 stream >> when >> channel >> message >> data; 1079 stream >> when >> channel >> message >> data;
1096 AlarmServer::deleteAlarm( when, channel, message, data ); 1080 AlarmServer::deleteAlarm( when, channel, message, data );
1097 } 1081 }
1098 } 1082 }
1099 else if ( msg == "clockChange(bool)" ) { 1083 else if ( msg == "clockChange(bool)" ) {
1100 int tmp; 1084 int tmp;
1101 stream >> tmp; 1085 stream >> tmp;
1102 emit clockChanged( tmp ); 1086 emit clockChanged( tmp );
1103 } 1087 }
1104 else if ( msg == "weekChange(bool)" ) { 1088 else if ( msg == "weekChange(bool)" ) {
1105 int tmp; 1089 int tmp;
1106 stream >> tmp; 1090 stream >> tmp;
1107 emit weekChanged( tmp ); 1091 emit weekChanged( tmp );
1108 } 1092 }
1109 else if ( msg == "setDateFormat(DateFormat)" ) { 1093 else if ( msg == "setDateFormat(DateFormat)" ) {
1110 DateFormat tmp; 1094 DateFormat tmp;
1111 stream >> tmp; 1095 stream >> tmp;
1112 emit dateFormatChanged( tmp ); 1096 emit dateFormatChanged( tmp );
1113 } 1097 }
1114 else if ( msg == "setVolume(int,int)" ) { 1098 else if ( msg == "setVolume(int,int)" ) {
1115 int t, v; 1099 int t, v;
1116 stream >> t >> v; 1100 stream >> t >> v;
1117 setVolume( t, v ); 1101 setVolume( t, v );
1118 emit volumeChanged( muted ); 1102 emit volumeChanged( muted );
1119 } 1103 }
1120 else if ( msg == "volumeChange(bool)" ) { 1104 else if ( msg == "volumeChange(bool)" ) {
1121 stream >> muted; 1105 stream >> muted;
1122 setVolume(); 1106 setVolume();
1123 emit volumeChanged( muted ); 1107 emit volumeChanged( muted );
1124 } 1108 }
1125 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1109 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1126 int t, v; 1110 int t, v;
1127 stream >> t >> v; 1111 stream >> t >> v;
1128 setMic( t, v ); 1112 setMic( t, v );
1129 emit micChanged( micMuted ); 1113 emit micChanged( micMuted );
1130 } 1114 }
1131 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1115 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1132 stream >> micMuted; 1116 stream >> micMuted;
1133 setMic(); 1117 setMic();
1134 emit micChanged( micMuted ); 1118 emit micChanged( micMuted );
1135 } 1119 }
1136#endif 1120#endif
1137} 1121}
1138 1122
1139/*! 1123/*!
1140 \internal 1124 \internal
1141*/ 1125*/
1142bool QPEApplication::raiseAppropriateWindow() 1126bool QPEApplication::raiseAppropriateWindow()
1143{ 1127{
1144 bool r = FALSE; 1128 bool r = FALSE;
1145 // ########## raise()ing main window should raise and set active 1129 // ########## raise()ing main window should raise and set active
1146 // ########## it and then all childen. This belongs in Qt/Embedded 1130 // ########## it and then all childen. This belongs in Qt/Embedded
1147 QWidget *top = d->qpe_main_widget; 1131 QWidget *top = d->qpe_main_widget;
1148 if ( !top ) 1132 if ( !top )
1149 top = mainWidget(); 1133 top = mainWidget();
1150 if ( top && d->keep_running ) { 1134 if ( top && d->keep_running ) {
1151 if ( top->isVisible() ) 1135 if ( top->isVisible() )
1152 r = TRUE; 1136 r = TRUE;
1153 else if (d->preloaded) { 1137 else if (d->preloaded) {
1154 // We are preloaded and not visible.. pretend we just started.. 1138 // We are preloaded and not visible.. pretend we just started..
1155 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1139 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1156 e << d->appName; 1140 e << d->appName;
1157 } 1141 }
1158 1142
1159 d->show_mx(top, d->nomaximize); 1143 d->show_mx(top, d->nomaximize);
1160 top->raise(); 1144 top->raise();
1161 top->setActiveWindow(); 1145 top->setActiveWindow();
1162 } 1146 }
1163 QWidget *topm = activeModalWidget(); 1147 QWidget *topm = activeModalWidget();
1164 if ( topm && topm != top ) { 1148 if ( topm && topm != top ) {
1165 topm->show(); 1149 topm->show();
1166 topm->raise(); 1150 topm->raise();
1167 topm->setActiveWindow(); 1151 topm->setActiveWindow();
1168 // If we haven't already handled the fastAppShowing message 1152 // If we haven't already handled the fastAppShowing message
1169 if (!top && d->preloaded) { 1153 if (!top && d->preloaded) {
1170 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1154 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1171 e << d->appName; 1155 e << d->appName;
1172 } 1156 }
1173 r = FALSE; 1157 r = FALSE;
1174 } 1158 }
1175 return r; 1159 return r;
1176} 1160}
1177 1161
1178void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1162void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1179{ 1163{
1180#ifdef Q_WS_QWS 1164#ifdef Q_WS_QWS
1181 1165
1182 if ( msg == "quit()" ) { 1166 if ( msg == "quit()" ) {
1183 tryQuit(); 1167 tryQuit();
1184 } 1168 }
1185 else if ( msg == "quitIfInvisible()" ) { 1169 else if ( msg == "quitIfInvisible()" ) {
1186 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1170 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1187 quit(); 1171 quit();
1188 } 1172 }
1189 else if ( msg == "close()" ) { 1173 else if ( msg == "close()" ) {
1190 hideOrQuit(); 1174 hideOrQuit();
1191 } 1175 }
1192 else if ( msg == "disablePreload()" ) { 1176 else if ( msg == "disablePreload()" ) {
@@ -1504,255 +1488,259 @@ bool QPEApplication::eventFilter( QObject *o, QEvent *e )
1504 d->presstimer = 0; 1488 d->presstimer = 0;
1505 } 1489 }
1506 break; 1490 break;
1507 case QEvent::MouseButtonRelease: 1491 case QEvent::MouseButtonRelease:
1508 if ( me->button() == LeftButton ) { 1492 if ( me->button() == LeftButton ) {
1509 if ( d->presstimer ) { 1493 if ( d->presstimer ) {
1510 killTimer(d->presstimer); 1494 killTimer(d->presstimer);
1511 d->presstimer = 0; 1495 d->presstimer = 0;
1512 } 1496 }
1513 if ( d->rightpressed && d->presswidget ) { 1497 if ( d->rightpressed && d->presswidget ) {
1514 // Right released 1498 // Right released
1515 postEvent( d->presswidget, 1499 postEvent( d->presswidget,
1516 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), 1500 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
1517 RightButton, LeftButton + RightButton ) ); 1501 RightButton, LeftButton + RightButton ) );
1518 // Left released, off-widget 1502 // Left released, off-widget
1519 postEvent( d->presswidget, 1503 postEvent( d->presswidget,
1520 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), 1504 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1),
1521 LeftButton, LeftButton ) ); 1505 LeftButton, LeftButton ) );
1522 postEvent( d->presswidget, 1506 postEvent( d->presswidget,
1523 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), 1507 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1),
1524 LeftButton, LeftButton ) ); 1508 LeftButton, LeftButton ) );
1525 d->rightpressed = FALSE; 1509 d->rightpressed = FALSE;
1526 return TRUE; // don't send the real Left release 1510 return TRUE; // don't send the real Left release
1527 } 1511 }
1528 } 1512 }
1529 break; 1513 break;
1530 default: 1514 default:
1531 break; 1515 break;
1532 } 1516 }
1533 break; 1517 break;
1534 default: 1518 default:
1535 ; 1519 ;
1536 } 1520 }
1537 } 1521 }
1538 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 1522 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
1539 QKeyEvent *ke = (QKeyEvent *)e; 1523 QKeyEvent *ke = (QKeyEvent *)e;
1540 if ( ke->key() == Key_Enter ) { 1524 if ( ke->key() == Key_Enter ) {
1541 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 1525 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
1542 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 1526 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
1543 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 1527 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
1544 return TRUE; 1528 return TRUE;
1545 } 1529 }
1546 } 1530 }
1547 } 1531 }
1548 return FALSE; 1532 return FALSE;
1549} 1533}
1550 1534
1551/*! 1535/*!
1552 \reimp 1536 \reimp
1553*/ 1537*/
1554void QPEApplication::timerEvent( QTimerEvent *e ) 1538void QPEApplication::timerEvent( QTimerEvent *e )
1555{ 1539{
1556 if ( e->timerId() == d->presstimer && d->presswidget ) { 1540 if ( e->timerId() == d->presstimer && d->presswidget ) {
1557 // Right pressed 1541 // Right pressed
1558 postEvent( d->presswidget, 1542 postEvent( d->presswidget,
1559 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 1543 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
1560 RightButton, LeftButton ) ); 1544 RightButton, LeftButton ) );
1561 killTimer( d->presstimer ); 1545 killTimer( d->presstimer );
1562 d->presstimer = 0; 1546 d->presstimer = 0;
1563 d->rightpressed = TRUE; 1547 d->rightpressed = TRUE;
1564 } 1548 }
1565} 1549}
1566 1550
1567void QPEApplication::removeSenderFromStylusDict() 1551void QPEApplication::removeSenderFromStylusDict()
1568{ 1552{
1569 stylusDict->remove 1553 stylusDict->remove
1570 ( ( void* ) sender() ); 1554 ( ( void* ) sender() );
1571 if ( d->presswidget == sender() ) 1555 if ( d->presswidget == sender() )
1572 d->presswidget = 0; 1556 d->presswidget = 0;
1573} 1557}
1574 1558
1575/*! 1559/*!
1576 \internal 1560 \internal
1577*/ 1561*/
1578bool QPEApplication::keyboardGrabbed() const 1562bool QPEApplication::keyboardGrabbed() const
1579{ 1563{
1580 return d->kbgrabber; 1564 return d->kbgrabber;
1581} 1565}
1582 1566
1583 1567
1584/*! 1568/*!
1585 Reverses the effect of grabKeyboard(). This is called automatically 1569 Reverses the effect of grabKeyboard(). This is called automatically
1586 on program exit. 1570 on program exit.
1587*/ 1571*/
1588void QPEApplication::ungrabKeyboard() 1572void QPEApplication::ungrabKeyboard()
1589{ 1573{
1590 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; 1574 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d;
1591 if ( d->kbgrabber == 2 ) { 1575 if ( d->kbgrabber == 2 ) {
1592#ifndef QT_NO_COP 1576#ifndef QT_NO_COP
1593 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); 1577 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
1594 e << QString::null; 1578 e << QString::null;
1595#endif 1579#endif
1596 1580
1597 d->kbregrab = FALSE; 1581 d->kbregrab = FALSE;
1598 d->kbgrabber = 0; 1582 d->kbgrabber = 0;
1599 } 1583 }
1600} 1584}
1601 1585
1602/*! 1586/*!
1603 Grabs the physical keyboard keys, e.g. the application's launching 1587 Grabs the physical keyboard keys, e.g. the application's launching
1604 keys. Instead of launching applications when these keys are pressed 1588 keys. Instead of launching applications when these keys are pressed
1605 the signals emitted are sent to this application instead. Some games 1589 the signals emitted are sent to this application instead. Some games
1606 programs take over the launch keys in this way to make interaction 1590 programs take over the launch keys in this way to make interaction
1607 easier. 1591 easier.
1608 1592
1609 \sa ungrabKeyboard() 1593 \sa ungrabKeyboard()
1610*/ 1594*/
1611void QPEApplication::grabKeyboard() 1595void QPEApplication::grabKeyboard()
1612{ 1596{
1613 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; 1597 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d;
1614 if ( qApp->type() == QApplication::GuiServer ) 1598 if ( qApp->type() == QApplication::GuiServer )
1615 d->kbgrabber = 0; 1599 d->kbgrabber = 0;
1616 else { 1600 else {
1617#ifndef QT_NO_COP 1601#ifndef QT_NO_COP
1618 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); 1602 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
1619 e << d->appName; 1603 e << d->appName;
1620#endif 1604#endif
1621 1605
1622 d->kbgrabber = 2; // me 1606 d->kbgrabber = 2; // me
1623 } 1607 }
1624} 1608}
1625 1609
1626/*! 1610/*!
1627 \reimp 1611 \reimp
1628*/ 1612*/
1629int QPEApplication::exec() 1613int QPEApplication::exec()
1630{ 1614{
1631#ifndef QT_NO_COP 1615#ifndef QT_NO_COP
1632 d->sendQCopQ(); 1616 d->sendQCopQ();
1633#endif 1617#endif
1634 1618
1635 if ( d->keep_running ) 1619 if ( d->keep_running )
1636 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 1620 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
1637 return QApplication::exec(); 1621 return QApplication::exec();
1638 1622
1639#ifndef QT_NO_COP 1623#ifndef QT_NO_COP
1640 1624
1641 { 1625 {
1642 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1626 QCopEnvelope e( "QPE/System", "closing(QString)" );
1643 e << d->appName; 1627 e << d->appName;
1644 } 1628 }
1645#endif 1629#endif
1646 processEvents(); 1630 processEvents();
1647 return 0; 1631 return 0;
1648} 1632}
1649 1633
1650/*! 1634/*!
1651 \internal 1635 \internal
1652 External request for application to quit. Quits if possible without 1636 External request for application to quit. Quits if possible without
1653 loosing state. 1637 loosing state.
1654*/ 1638*/
1655void QPEApplication::tryQuit() 1639void QPEApplication::tryQuit()
1656{ 1640{
1657 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 1641 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
1658 return ; // Inside modal loop or konsole. Too hard to save state. 1642 return ; // Inside modal loop or konsole. Too hard to save state.
1659#ifndef QT_NO_COP 1643#ifndef QT_NO_COP
1660 1644
1661 { 1645 {
1662 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1646 QCopEnvelope e( "QPE/System", "closing(QString)" );
1663 e << d->appName; 1647 e << d->appName;
1664 } 1648 }
1665#endif 1649#endif
1666 processEvents(); 1650 processEvents();
1667 1651
1668 quit(); 1652 quit();
1669} 1653}
1670 1654
1671/*! 1655/*!
1672 \internal 1656 \internal
1673 User initiated quit. Makes the window 'Go Away'. If preloaded this means 1657 User initiated quit. Makes the window 'Go Away'. If preloaded this means
1674 hiding the window. If not it means quitting the application. 1658 hiding the window. If not it means quitting the application.
1675 As this is user initiated we don't need to check state. 1659 As this is user initiated we don't need to check state.
1676*/ 1660*/
1677void QPEApplication::hideOrQuit() 1661void QPEApplication::hideOrQuit()
1678{ 1662{
1679 processEvents(); 1663 processEvents();
1680 1664
1681 // If we are a preloaded application we don't actually quit, so emit 1665 // If we are a preloaded application we don't actually quit, so emit
1682 // a System message indicating we're quasi-closing. 1666 // a System message indicating we're quasi-closing.
1683 if ( d->preloaded && d->qpe_main_widget ) 1667 if ( d->preloaded && d->qpe_main_widget )
1684#ifndef QT_NO_COP 1668#ifndef QT_NO_COP
1685 1669
1686 { 1670 {
1687 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 1671 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
1688 e << d->appName; 1672 e << d->appName;
1689 d->qpe_main_widget->hide(); 1673 d->qpe_main_widget->hide();
1690 } 1674 }
1691#endif 1675#endif
1692 else 1676 else
1693 quit(); 1677 quit();
1694} 1678}
1695 1679
1680
1681// These 6 stubs below need 1.5K in the binary and besides that -
1682// we are not using ancient toolchains anymore - sandman
1683
1696#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SHARP) 1684#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SHARP)
1697 1685
1698// The libraries with the skiff package (and possibly others) have 1686// The libraries with the skiff package (and possibly others) have
1699// completely useless implementations of builtin new and delete that 1687// completely useless implementations of builtin new and delete that
1700// use about 50% of your CPU. Here we revert to the simple libc 1688// use about 50% of your CPU. Here we revert to the simple libc
1701// functions. 1689// functions.
1702 1690
1703void* operator new[]( size_t size ) 1691void* operator new[]( size_t size )
1704{ 1692{
1705 return malloc( size ); 1693 return malloc( size );
1706} 1694}
1707 1695
1708void* operator new( size_t size ) 1696void* operator new( size_t size )
1709{ 1697{
1710 return malloc( size ); 1698 return malloc( size );
1711} 1699}
1712 1700
1713void operator delete[]( void* p ) 1701void operator delete[]( void* p )
1714{ 1702{
1715 free( p ); 1703 free( p );
1716} 1704}
1717 1705
1718void operator delete[]( void* p, size_t /*size*/ ) 1706void operator delete[]( void* p, size_t /*size*/ )
1719{ 1707{
1720 free( p ); 1708 free( p );
1721} 1709}
1722 1710
1723void operator delete( void* p ) 1711void operator delete( void* p )
1724{ 1712{
1725 free( p ); 1713 free( p );
1726} 1714}
1727 1715
1728void operator delete( void* p, size_t /*size*/ ) 1716void operator delete( void* p, size_t /*size*/ )
1729{ 1717{
1730 free( p ); 1718 free( p );
1731} 1719}
1732 1720
1733#endif 1721#endif
1734 1722
1735#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 1723#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
1736#include <qwidgetlist.h> 1724#include <qwidgetlist.h>
1737#ifdef QWS 1725#ifdef QWS
1738#include <qgfx_qws.h> 1726#include <qgfx_qws.h>
1739extern QRect qt_maxWindowRect; 1727extern QRect qt_maxWindowRect;
1740void qt_setMaxWindowRect(const QRect& r ) 1728void qt_setMaxWindowRect(const QRect& r )
1741{ 1729{
1742 qt_maxWindowRect = qt_screen->mapFromDevice( r, 1730 qt_maxWindowRect = qt_screen->mapFromDevice( r,
1743 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); 1731 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) );
1744 // Re-resize any maximized windows 1732 // Re-resize any maximized windows
1745 QWidgetList* l = QApplication::topLevelWidgets(); 1733 QWidgetList* l = QApplication::topLevelWidgets();
1746 if ( l ) { 1734 if ( l ) {
1747 QWidget * w = l->first(); 1735 QWidget * w = l->first();
1748 while ( w ) { 1736 while ( w ) {
1749 if ( w->isVisible() && w->isMaximized() ) { 1737 if ( w->isVisible() && w->isMaximized() ) {
1750 w->showMaximized(); 1738 w->showMaximized();
1751 } 1739 }
1752 w = l->next(); 1740 w = l->next();
1753 } 1741 }
1754 delete l; 1742 delete l;
1755 } 1743 }
1756} 1744}
1757#endif 1745#endif
1758#endif 1746#endif
diff --git a/library/qpeapplication.h b/library/qpeapplication.h
index 2515f1b..86affa6 100644
--- a/library/qpeapplication.h
+++ b/library/qpeapplication.h
@@ -1,156 +1,158 @@
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#ifndef __QPE_APPLICATION_H__ 20#ifndef __QPE_APPLICATION_H__
21#define __QPE_APPLICATION_H__ 21#define __QPE_APPLICATION_H__
22 22
23 23
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qdialog.h> 25#include <qdialog.h>
26#if defined(_WS_QWS_) && !defined(Q_WS_QWS) 26#if defined(_WS_QWS_) && !defined(Q_WS_QWS)
27#define Q_WS_QWS 27#define Q_WS_QWS
28#endif 28#endif
29#include "qpedecoration_qws.h" 29#include "qpedecoration_qws.h"
30#include "timestring.h" 30#include "timestring.h"
31 31
32class QCopChannel; 32class QCopChannel;
33class QPEApplicationData; 33class QPEApplicationData;
34class QWSEvent; 34class QWSEvent;
35class QWSKeyEvent; 35class QWSKeyEvent;
36 36
37class QPEApplication : public QApplication 37class QPEApplication : public QApplication
38{ 38{
39 Q_OBJECT 39 Q_OBJECT
40public: 40public:
41 QPEApplication( int& argc, char **argv, Type=GuiClient ); 41 QPEApplication( int& argc, char **argv, Type=GuiClient );
42 ~QPEApplication(); 42 ~QPEApplication();
43 43
44 static QString qpeDir(); 44 static QString qpeDir();
45 static QString documentDir(); 45 static QString documentDir();
46 void applyStyle(); 46 void applyStyle();
47 static int defaultRotation(); 47 static int defaultRotation();
48 static void setDefaultRotation(int r); 48 static void setDefaultRotation(int r);
49 static void grabKeyboard(); 49 static void grabKeyboard();
50 static void ungrabKeyboard(); 50 static void ungrabKeyboard();
51 51
52 enum StylusMode { 52 enum StylusMode {
53 LeftOnly, 53 LeftOnly,
54 RightOnHold 54 RightOnHold
55 // RightOnHoldLeftDelayed, etc. 55 // RightOnHoldLeftDelayed, etc.
56 }; 56 };
57 static void setStylusOperation( QWidget*, StylusMode ); 57 static void setStylusOperation( QWidget*, StylusMode );
58 static StylusMode stylusOperation( QWidget* ); 58 static StylusMode stylusOperation( QWidget* );
59 59
60 enum InputMethodHint { 60 enum InputMethodHint {
61 Normal, 61 Normal,
62 AlwaysOff, 62 AlwaysOff,
63 AlwaysOn 63 AlwaysOn
64 }; 64 };
65 65
66 enum screenSaverHint { 66 enum screenSaverHint {
67 Disable = 0, 67 Disable = 0,
68 DisableLightOff = 1, 68 DisableLightOff = 1,
69 DisableSuspend = 2, 69 DisableSuspend = 2,
70 Enable = 100 70 Enable = 100
71 }; 71 };
72 72
73 static void setInputMethodHint( QWidget *, InputMethodHint ); 73 static void setInputMethodHint( QWidget *, InputMethodHint );
74 static InputMethodHint inputMethodHint( QWidget * ); 74 static InputMethodHint inputMethodHint( QWidget * );
75 75
76 void showMainWidget( QWidget*, bool nomax=FALSE ); 76 void showMainWidget( QWidget*, bool nomax=FALSE );
77 void showMainDocumentWidget( QWidget*, bool nomax=FALSE ); 77 void showMainDocumentWidget( QWidget*, bool nomax=FALSE );
78 static void showDialog( QDialog*, bool nomax=FALSE ); 78 static void showDialog( QDialog*, bool nomax=FALSE );
79 static int execDialog( QDialog*, bool nomax=FALSE ); 79 static int execDialog( QDialog*, bool nomax=FALSE );
80 80
81 static void setKeepRunning(); 81 static void setKeepRunning();
82 bool keepRunning() const; 82 bool keepRunning() const;
83 83
84 bool keyboardGrabbed() const; 84 bool keyboardGrabbed() const;
85 85
86 int exec(); 86 int exec();
87 87
88signals: 88signals:
89 void clientMoused(); 89 void clientMoused();
90 void timeChanged(); 90 void timeChanged();
91 void clockChanged( bool pm ); 91 void clockChanged( bool pm );
92 void micChanged( bool muted ); 92 void micChanged( bool muted );
93 void volumeChanged( bool muted ); 93 void volumeChanged( bool muted );
94 void appMessage( const QCString& msg, const QByteArray& data); 94 void appMessage( const QCString& msg, const QByteArray& data);
95 void weekChanged( bool startOnMonday ); 95 void weekChanged( bool startOnMonday );
96 void dateFormatChanged( DateFormat ); 96 void dateFormatChanged( DateFormat );
97 void flush(); 97 void flush();
98 void reload(); 98 void reload();
99 99
100private slots: 100private slots:
101 void systemMessage( const QCString &msg, const QByteArray &data ); 101 void systemMessage( const QCString &msg, const QByteArray &data );
102 void pidMessage( const QCString &msg, const QByteArray &data ); 102 void pidMessage( const QCString &msg, const QByteArray &data );
103 void removeSenderFromStylusDict(); 103 void removeSenderFromStylusDict();
104 void hideOrQuit(); 104 void hideOrQuit();
105 105
106protected: 106protected:
107 bool qwsEventFilter( QWSEvent * ); 107 bool qwsEventFilter( QWSEvent * );
108 void internalSetStyle( const QString &style ); 108 void internalSetStyle( const QString &style );
109 void prepareForTermination(bool willrestart); 109 void prepareForTermination(bool willrestart);
110 virtual void restart(); 110 virtual void restart();
111 virtual void shutdown(); 111 virtual void shutdown();
112 bool eventFilter( QObject *, QEvent * ); 112 bool eventFilter( QObject *, QEvent * );
113 void timerEvent( QTimerEvent * ); 113 void timerEvent( QTimerEvent * );
114 bool raiseAppropriateWindow(); 114 bool raiseAppropriateWindow();
115 virtual void tryQuit(); 115 virtual void tryQuit();
116 116
117 virtual void polish ( QWidget * ); // this is actually implemented in qt_override.cpp (!)
118
117private: 119private:
118 void mapToDefaultAction( QWSKeyEvent *ke, int defKey ); 120 void mapToDefaultAction( QWSKeyEvent *ke, int defKey );
119 121
120#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 122#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
121 QCopChannel *sysChannel; 123 QCopChannel *sysChannel;
122 QCopChannel *pidChannel; 124 QCopChannel *pidChannel;
123#endif 125#endif
124 QPEApplicationData *d; 126 QPEApplicationData *d;
125 127
126 bool reserved_sh; 128 bool reserved_sh;
127 129
128 130
129 131
130}; 132};
131 133
132inline void QPEApplication::showDialog( QDialog* d, bool nomax ) 134inline void QPEApplication::showDialog( QDialog* d, bool nomax )
133{ 135{
134 QSize sh = d->sizeHint(); 136 QSize sh = d->sizeHint();
135 int w = QMAX(sh.width(),d->width()); 137 int w = QMAX(sh.width(),d->width());
136 int h = QMAX(sh.height(),d->height()); 138 int h = QMAX(sh.height(),d->height());
137 if ( !nomax 139 if ( !nomax
138 && ( w > qApp->desktop()->width()*3/4 140 && ( w > qApp->desktop()->width()*3/4
139 || h > qApp->desktop()->height()*3/4 ) ) 141 || h > qApp->desktop()->height()*3/4 ) )
140 { 142 {
141 d->showMaximized(); 143 d->showMaximized();
142 } else { 144 } else {
143 d->resize(w,h); 145 d->resize(w,h);
144 d->show(); 146 d->show();
145 } 147 }
146} 148}
147 149
148inline int QPEApplication::execDialog( QDialog* d, bool nomax ) 150inline int QPEApplication::execDialog( QDialog* d, bool nomax )
149{ 151{
150 showDialog(d,nomax); 152 showDialog(d,nomax);
151 return d->exec(); 153 return d->exec();
152} 154}
153 155
154 156
155#endif 157#endif
156 158
diff --git a/library/qt_override.cpp b/library/qt_override.cpp
new file mode 100644
index 0000000..0d783bd
--- a/dev/null
+++ b/library/qt_override.cpp
@@ -0,0 +1,166 @@
1
2#include <qpe/qpeapplication.h>
3#include <qwsdecoration_qws.h>
4#include <qcommonstyle.h>
5#include <qfontdatabase.h>
6
7#include <unistd.h>
8#include <stdlib.h>
9#include <stdio.h>
10
11#include "qt_override_p.h"
12
13
14
15struct color_fix_t {
16 char *m_app;
17 char *m_class;
18 char *m_name;
19 QColorGroup::ColorRole m_set;
20 QColorGroup::ColorRole m_get;
21};
22
23
24
25static const color_fix_t apps_that_need_special_colors [] = {
26 { "HancomMobileWord", "HTextEdit", 0, QColorGroup::Background, QColorGroup::Base },
27 { "neocal", "Display", 0, QColorGroup::Background, QColorGroup::Base },
28
29 { 0, 0, 0, QColorGroup::Base, QColorGroup::Base }
30};
31
32static const char * const apps_that_need_pointsizes_times_10 [] = {
33 "HancomMobileWord",
34
35 0
36};
37
38
39
40
41int Opie::force_appearance = 0;
42
43
44// Return the *real* name of the binary - not just a quick guess
45// by looking at argv [0] (which could be anything)
46
47static void binaryNameFree ( )
48{
49 ::free ((void *) Opie::binaryName ( )); // we need to cast away the const here
50}
51
52const char *Opie::binaryName ( )
53{
54 static const char *appname = 0;
55
56 if ( !appname ) {
57 char dst [PATH_MAX + 1];
58 int l = ::readlink ( "/proc/self/exe", dst, PATH_MAX );
59
60 if ( l <= 0 )
61 l = 0;
62
63 dst [l] = 0;
64 const char *b = ::strrchr ( dst, '/' );
65 appname = ::strdup ( b ? b + 1 : dst );
66
67 ::atexit ( binaryNameFree );
68 }
69 return appname;
70}
71
72
73// Fix for a toolchain incompatibility (binaries compiled with
74// old tcs using shared libs compiled with newer tcs)
75
76extern "C" {
77
78extern void __gmon_start__ ( ) __attribute__(( weak ));
79
80extern void __gmon_start__ ( )
81{
82}
83
84}
85
86
87// Fix for apps, that use QPainter::eraseRect() which doesn't work with styles
88// that set a background pixmap (it would be easier to fix eraseRect(), but
89// TT made it an inline ...)
90
91void QPEApplication::polish ( QWidget *w )
92{
93 qDebug ( "QPEApplication::polish()" );
94
95 for ( const color_fix_t *ptr = apps_that_need_special_colors; ptr-> m_app; ptr++ ) {
96 if (( ::strcmp ( Opie::binaryName ( ), ptr-> m_app ) == 0 ) &&
97 ( ptr-> m_class ? w-> inherits ( ptr-> m_class ) : true ) &&
98 ( ptr-> m_name ? ( ::strcmp ( w-> name ( ), ptr-> m_name ) == 0 ) : true )) {
99 QPalette pal = w-> palette ( );
100 pal. setColor ( ptr-> m_set, pal. color ( QPalette::Active, ptr-> m_get ));
101 w-> setPalette ( pal );
102 }
103 }
104 QApplication::polish ( w );
105}
106
107
108// Fix for the binary incompatibility that TT introduced in Qt/E 2.3.4 -- point sizes
109// were multiplied by 10 (which was incorrect)
110
111QValueList <int> QFontDatabase::pointSizes ( QString const &family, QString const &style, QString const &charset )
112{
113 qDebug ( "QFontDatabase::pointSizes()" );
114
115 QValueList <int> sl = pointSizes_NonWeak ( family, style, charset );
116
117 for ( const char * const *ptr = apps_that_need_pointsizes_times_10; *ptr; ptr++ ) {
118 if ( ::strcmp ( Opie::binaryName ( ), *ptr ) == 0 ) {
119 for ( QValueList <int>::Iterator it = sl. begin ( ); it != sl. end ( ); ++it )
120 *it *= 10;
121 }
122 }
123 return sl;
124}
125
126
127// Various style/font/color related overrides for weak symbols in Qt/E,
128// which allows us to force the usage of the global Opie appearance.
129
130void QApplication::setStyle ( QStyle *style )
131{
132 qDebug ( "QApplication::setStyle()" );
133
134 if ( Opie::force_appearance & Opie::Force_Style )
135 delete style;
136 else
137 QApplication::setStyle_NonWeak ( style );
138}
139
140void QApplication::setPalette ( const QPalette &pal, bool informWidgets, const char *className )
141{
142 qDebug ( "QApplication::setPalette()" );
143
144 if (!( Opie::force_appearance & Opie::Force_Style ))
145 QApplication::setPalette_NonWeak ( pal, informWidgets, className );
146}
147
148void QApplication::setFont ( const QFont &fnt, bool informWidgets, const char *className )
149{
150 qDebug ( "QApplication::setFont()" );
151
152 if (!( Opie::force_appearance & Opie::Force_Font ))
153 QApplication::setFont_NonWeak ( fnt, informWidgets, className );
154}
155
156
157void QApplication::qwsSetDecoration ( QWSDecoration *deco )
158{
159 qDebug ( "QApplication::qwsSetDecoration()" );
160
161 if ( Opie::force_appearance & Opie::Force_Decoration )
162 delete deco;
163 else
164 QApplication::qwsSetDecoration_NonWeak ( deco );
165}
166
diff --git a/library/qt_override_p.h b/library/qt_override_p.h
new file mode 100644
index 0000000..d11917c
--- a/dev/null
+++ b/library/qt_override_p.h
@@ -0,0 +1,21 @@
1#ifndef __QT_OVERRIDE_H__
2#define __QT_OVERRIDE_H__
3
4namespace Opie {
5
6enum ForceAppearance {
7 Force_Style = 0x01,
8 Force_Font = 0x02,
9 Force_Decoration = 0x04,
10
11 Force_All = 0xff,
12 Force_None = 0x00,
13};
14
15extern const char *binaryName ( );
16
17extern int force_appearance;
18
19}
20
21#endif