summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp9
1 files changed, 1 insertions, 8 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index c875ff2..86dbe85 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -536,1101 +536,1094 @@ static void setVolume( int t = 0, int percent = -1 )
536#ifndef QT_NO_SOUND 536#ifndef QT_NO_SOUND
537 int fd = 0; 537 int fd = 0;
538 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 538 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
539 int vol = muted ? 0 : percent; 539 int vol = muted ? 0 : percent;
540 // set both channels to same volume 540 // set both channels to same volume
541 vol |= vol << 8; 541 vol |= vol << 8;
542 ioctl( fd, MIXER_WRITE( SOUND_MIXER_VOLUME ), &vol ); 542 ioctl( fd, MIXER_WRITE( SOUND_MIXER_VOLUME ), &vol );
543 ::close( fd ); 543 ::close( fd );
544 } 544 }
545#endif 545#endif
546 } 546 }
547 break; 547 break;
548 } 548 }
549} 549}
550 550
551static void setMic( int t = 0, int percent = -1 ) 551static void setMic( int t = 0, int percent = -1 )
552{ 552{
553 switch ( t ) { 553 switch ( t ) {
554 case 0: { 554 case 0: {
555 Config cfg( "qpe" ); 555 Config cfg( "qpe" );
556 cfg.setGroup( "Volume" ); 556 cfg.setGroup( "Volume" );
557 if ( percent < 0 ) 557 if ( percent < 0 )
558 percent = cfg.readNumEntry( "Mic", 50 ); 558 percent = cfg.readNumEntry( "Mic", 50 );
559 559
560#ifndef QT_NO_SOUND 560#ifndef QT_NO_SOUND
561 int fd = 0; 561 int fd = 0;
562 int mic = micMuted ? 0 : percent; 562 int mic = micMuted ? 0 : percent;
563 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 563 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
564 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 564 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
565 ::close( fd ); 565 ::close( fd );
566 } 566 }
567#endif 567#endif
568 } 568 }
569 break; 569 break;
570 } 570 }
571} 571}
572 572
573 573
574static void setBass( int t = 0, int percent = -1 ) 574static void setBass( int t = 0, int percent = -1 )
575{ 575{
576 switch ( t ) { 576 switch ( t ) {
577 case 0: { 577 case 0: {
578 Config cfg( "qpe" ); 578 Config cfg( "qpe" );
579 cfg.setGroup( "Volume" ); 579 cfg.setGroup( "Volume" );
580 if ( percent < 0 ) 580 if ( percent < 0 )
581 percent = cfg.readNumEntry( "BassPercent", 50 ); 581 percent = cfg.readNumEntry( "BassPercent", 50 );
582 582
583#ifndef QT_NO_SOUND 583#ifndef QT_NO_SOUND
584 int fd = 0; 584 int fd = 0;
585 int bass = percent; 585 int bass = percent;
586 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 586 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
587 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass ); 587 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass );
588 ::close( fd ); 588 ::close( fd );
589 } 589 }
590#endif 590#endif
591 } 591 }
592 break; 592 break;
593 } 593 }
594} 594}
595 595
596 596
597static void setTreble( int t = 0, int percent = -1 ) 597static void setTreble( int t = 0, int percent = -1 )
598{ 598{
599 switch ( t ) { 599 switch ( t ) {
600 case 0: { 600 case 0: {
601 Config cfg( "qpe" ); 601 Config cfg( "qpe" );
602 cfg.setGroup( "Volume" ); 602 cfg.setGroup( "Volume" );
603 if ( percent < 0 ) 603 if ( percent < 0 )
604 percent = cfg.readNumEntry( "TreblePercent", 50 ); 604 percent = cfg.readNumEntry( "TreblePercent", 50 );
605 605
606#ifndef QT_NO_SOUND 606#ifndef QT_NO_SOUND
607 int fd = 0; 607 int fd = 0;
608 int treble = percent; 608 int treble = percent;
609 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 609 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
610 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble ); 610 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble );
611 ::close( fd ); 611 ::close( fd );
612 } 612 }
613#endif 613#endif
614 } 614 }
615 break; 615 break;
616 } 616 }
617} 617}
618 618
619 619
620/** 620/**
621 \class QPEApplication 621 \class QPEApplication
622 \brief The QPEApplication class implements various system services 622 \brief The QPEApplication class implements various system services
623 that are available to all Qtopia applications. 623 that are available to all Qtopia applications.
624 624
625 Simply by using QPEApplication instead of QApplication, a standard Qt 625 Simply by using QPEApplication instead of QApplication, a standard Qt
626 application becomes a Qtopia application. It automatically follows 626 application becomes a Qtopia application. It automatically follows
627 style changes, quits and raises, and in the 627 style changes, quits and raises, and in the
628 case of \link docwidget.html document-oriented\endlink applications, 628 case of \link docwidget.html document-oriented\endlink applications,
629 changes the currently displayed document in response to the environment. 629 changes the currently displayed document in response to the environment.
630 630
631 To create a \link docwidget.html document-oriented\endlink 631 To create a \link docwidget.html document-oriented\endlink
632 application use showMainDocumentWidget(); to create a 632 application use showMainDocumentWidget(); to create a
633 non-document-oriented application use showMainWidget(). The 633 non-document-oriented application use showMainWidget(). The
634 keepRunning() function indicates whether the application will 634 keepRunning() function indicates whether the application will
635 continue running after it's processed the last \link qcop.html 635 continue running after it's processed the last \link qcop.html
636 QCop\endlink message. This can be changed using setKeepRunning(). 636 QCop\endlink message. This can be changed using setKeepRunning().
637 637
638 A variety of signals are emitted when certain events occur, for 638 A variety of signals are emitted when certain events occur, for
639 example, timeChanged(), clockChanged(), weekChanged(), 639 example, timeChanged(), clockChanged(), weekChanged(),
640 dateFormatChanged() and volumeChanged(). If the application receives 640 dateFormatChanged() and volumeChanged(). If the application receives
641 a \link qcop.html QCop\endlink message on the application's 641 a \link qcop.html QCop\endlink message on the application's
642 QPE/Application/\e{appname} channel, the appMessage() signal is 642 QPE/Application/\e{appname} channel, the appMessage() signal is
643 emitted. There are also flush() and reload() signals, which 643 emitted. There are also flush() and reload() signals, which
644 are emitted when synching begins and ends respectively - upon these 644 are emitted when synching begins and ends respectively - upon these
645 signals, the application should save and reload any data 645 signals, the application should save and reload any data
646 files that are involved in synching. Most of these signals will initially 646 files that are involved in synching. Most of these signals will initially
647 be received and unfiltered through the appMessage() signal. 647 be received and unfiltered through the appMessage() signal.
648 648
649 This class also provides a set of useful static functions. The 649 This class also provides a set of useful static functions. The
650 qpeDir() and documentDir() functions return the respective paths. 650 qpeDir() and documentDir() functions return the respective paths.
651 The grabKeyboard() and ungrabKeyboard() functions are used to 651 The grabKeyboard() and ungrabKeyboard() functions are used to
652 control whether the application takes control of the device's 652 control whether the application takes control of the device's
653 physical buttons (e.g. application launch keys). The stylus' mode of 653 physical buttons (e.g. application launch keys). The stylus' mode of
654 operation is set with setStylusOperation() and retrieved with 654 operation is set with setStylusOperation() and retrieved with
655 stylusOperation(). There are also setInputMethodHint() and 655 stylusOperation(). There are also setInputMethodHint() and
656 inputMethodHint() functions. 656 inputMethodHint() functions.
657 657
658 \ingroup qtopiaemb 658 \ingroup qtopiaemb
659*/ 659*/
660 660
661/*! 661/*!
662 \fn void QPEApplication::clientMoused() 662 \fn void QPEApplication::clientMoused()
663 663
664 \internal 664 \internal
665*/ 665*/
666 666
667/*! 667/*!
668 \fn void QPEApplication::timeChanged(); 668 \fn void QPEApplication::timeChanged();
669 This signal is emitted when the time changes outside the normal 669 This signal is emitted when the time changes outside the normal
670 passage of time, i.e. if the time is set backwards or forwards. 670 passage of time, i.e. if the time is set backwards or forwards.
671*/ 671*/
672 672
673/*! 673/*!
674 \fn void QPEApplication::clockChanged( bool ampm ); 674 \fn void QPEApplication::clockChanged( bool ampm );
675 675
676 This signal is emitted when the user changes the clock's style. If 676 This signal is emitted when the user changes the clock's style. If
677 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise, 677 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise,
678 they want a 24-hour clock. 678 they want a 24-hour clock.
679*/ 679*/
680 680
681/*! 681/*!
682 \fn void QPEApplication::volumeChanged( bool muted ) 682 \fn void QPEApplication::volumeChanged( bool muted )
683 683
684 This signal is emitted whenever the mute state is changed. If \a 684 This signal is emitted whenever the mute state is changed. If \a
685 muted is TRUE, then sound output has been muted. 685 muted is TRUE, then sound output has been muted.
686*/ 686*/
687 687
688/*! 688/*!
689 \fn void QPEApplication::weekChanged( bool startOnMonday ) 689 \fn void QPEApplication::weekChanged( bool startOnMonday )
690 690
691 This signal is emitted if the week start day is changed. If \a 691 This signal is emitted if the week start day is changed. If \a
692 startOnMonday is TRUE then the first day of the week is Monday; if 692 startOnMonday is TRUE then the first day of the week is Monday; if
693 \a startOnMonday is FALSE then the first day of the week is 693 \a startOnMonday is FALSE then the first day of the week is
694 Sunday. 694 Sunday.
695*/ 695*/
696 696
697/*! 697/*!
698 \fn void QPEApplication::dateFormatChanged(DateFormat) 698 \fn void QPEApplication::dateFormatChanged(DateFormat)
699 699
700 This signal is emitted whenever the date format is changed. 700 This signal is emitted whenever the date format is changed.
701*/ 701*/
702 702
703/*! 703/*!
704 \fn void QPEApplication::flush() 704 \fn void QPEApplication::flush()
705 705
706 ### 706 ###
707*/ 707*/
708 708
709/*! 709/*!
710 \fn void QPEApplication::reload() 710 \fn void QPEApplication::reload()
711 711
712*/ 712*/
713 713
714 714
715 715
716void QPEApplication::processQCopFile() 716void QPEApplication::processQCopFile()
717{ 717{
718 QString qcopfn("/tmp/qcop-msg-"); 718 QString qcopfn("/tmp/qcop-msg-");
719 qcopfn += d->appName; // append command name 719 qcopfn += d->appName; // append command name
720 720
721 QFile f(qcopfn); 721 QFile f(qcopfn);
722 if ( f.open(IO_ReadWrite) ) { 722 if ( f.open(IO_ReadWrite) ) {
723#ifndef Q_OS_WIN32 723#ifndef Q_OS_WIN32
724 flock(f.handle(), LOCK_EX); 724 flock(f.handle(), LOCK_EX);
725#endif 725#endif
726 QDataStream ds(&f); 726 QDataStream ds(&f);
727 QCString channel, message; 727 QCString channel, message;
728 QByteArray data; 728 QByteArray data;
729 while(!ds.atEnd()) { 729 while(!ds.atEnd()) {
730 ds >> channel >> message >> data; 730 ds >> channel >> message >> data;
731 d->enqueueQCop(channel,message,data); 731 d->enqueueQCop(channel,message,data);
732 } 732 }
733 ::ftruncate(f.handle(), 0); 733 ::ftruncate(f.handle(), 0);
734#ifndef Q_OS_WIN32 734#ifndef Q_OS_WIN32
735 f.flush(); 735 f.flush();
736 flock(f.handle(), LOCK_UN); 736 flock(f.handle(), LOCK_UN);
737#endif 737#endif
738 } 738 }
739#endif 739#endif
740} 740}
741 741
742 742
743/*! 743/*!
744 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 744 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
745 745
746 This signal is emitted when a message is received on this 746 This signal is emitted when a message is received on this
747 application's QPE/Application/<i>appname</i> \link qcop.html 747 application's QPE/Application/<i>appname</i> \link qcop.html
748 QCop\endlink channel. 748 QCop\endlink channel.
749 749
750 The slot to which you connect this signal uses \a msg and \a data 750 The slot to which you connect this signal uses \a msg and \a data
751 in the following way: 751 in the following way:
752 752
753\code 753\code
754 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 754 void MyWidget::receive( const QCString& msg, const QByteArray& data )
755 { 755 {
756 QDataStream stream( data, IO_ReadOnly ); 756 QDataStream stream( data, IO_ReadOnly );
757 if ( msg == "someMessage(int,int,int)" ) { 757 if ( msg == "someMessage(int,int,int)" ) {
758 int a,b,c; 758 int a,b,c;
759 stream >> a >> b >> c; 759 stream >> a >> b >> c;
760 ... 760 ...
761 } else if ( msg == "otherMessage(QString)" ) { 761 } else if ( msg == "otherMessage(QString)" ) {
762 ... 762 ...
763 } 763 }
764 } 764 }
765\endcode 765\endcode
766 766
767 \sa qcop.html 767 \sa qcop.html
768 Note that messages received here may be processed by qpe application 768 Note that messages received here may be processed by qpe application
769 and emitted as signals, such as flush() and reload(). 769 and emitted as signals, such as flush() and reload().
770*/ 770*/
771 771
772/*! 772/*!
773 Constructs a QPEApplication just as you would construct 773 Constructs a QPEApplication just as you would construct
774 a QApplication, passing \a argc, \a argv, and \a t. 774 a QApplication, passing \a argc, \a argv, and \a t.
775 775
776 For applications, \a t should be the default, GuiClient. Only 776 For applications, \a t should be the default, GuiClient. Only
777 the Qtopia server passes GuiServer. 777 the Qtopia server passes GuiServer.
778*/ 778*/
779QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 779QPEApplication::QPEApplication( int & argc, char **argv, Type t )
780 : QApplication( hack(argc), argv, t ), pidChannel( 0 ) 780 : QApplication( hack(argc), argv, t ), pidChannel( 0 )
781{ 781{
782 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices. 782 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices.
783 783
784 d = new QPEApplicationData; 784 d = new QPEApplicationData;
785 d->loadTextCodecs(); 785 d->loadTextCodecs();
786 d->loadImageCodecs(); 786 d->loadImageCodecs();
787 int dw = desktop() ->width(); 787 int dw = desktop() ->width();
788 788
789 if ( dw < 200 ) { 789 if ( dw < 200 ) {
790 setFont( QFont( "vera", 8 ) ); 790 setFont( QFont( "vera", 8 ) );
791 AppLnk::setSmallIconSize( 10 ); 791 AppLnk::setSmallIconSize( 10 );
792 AppLnk::setBigIconSize( 28 ); 792 AppLnk::setBigIconSize( 28 );
793 } 793 }
794#if defined(OPIE_HIGH_RES_SMALL_PHY) 794#if defined(OPIE_HIGH_RES_SMALL_PHY)
795 else if ( dw > 600 ) { 795 else if ( dw > 600 ) {
796 setFont( QFont( "vera", 16 ) ); 796 setFont( QFont( "vera", 16 ) );
797 AppLnk::setSmallIconSize( 24 ); 797 AppLnk::setSmallIconSize( 24 );
798 AppLnk::setBigIconSize( 48 ); 798 AppLnk::setBigIconSize( 48 );
799 } 799 }
800#endif 800#endif
801 else if ( dw > 200 ) { 801 else if ( dw > 200 ) {
802 setFont( QFont( "vera", 10 ) ); 802 setFont( QFont( "vera", 10 ) );
803 AppLnk::setSmallIconSize( 14 ); 803 AppLnk::setSmallIconSize( 14 );
804 AppLnk::setBigIconSize( 32 ); 804 AppLnk::setBigIconSize( 32 );
805 } 805 }
806 806
807 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 807 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
808 808
809 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 809 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
810 810
811 811
812 sysChannel = new QCopChannel( "QPE/System", this ); 812 sysChannel = new QCopChannel( "QPE/System", this );
813 connect( sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ), 813 connect( sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
814 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) ); 814 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) );
815 815
816/* COde now in initapp */ 816/* COde now in initapp */
817#if 0 817#if 0
818#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 818#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
819 819
820 QString qcopfn( "/tmp/qcop-msg-" ); 820 QString qcopfn( "/tmp/qcop-msg-" );
821 qcopfn += QString( argv[ 0 ] ); // append command name 821 qcopfn += QString( argv[ 0 ] ); // append command name
822 822
823 QFile f( qcopfn ); 823 QFile f( qcopfn );
824 if ( f.open( IO_ReadOnly ) ) { 824 if ( f.open( IO_ReadOnly ) ) {
825 flock( f.handle(), LOCK_EX ); 825 flock( f.handle(), LOCK_EX );
826 } 826 }
827 827
828 828
829 829
830 QCString channel = QCString( argv[ 0 ] ); 830 QCString channel = QCString( argv[ 0 ] );
831 channel.replace( QRegExp( ".*/" ), "" ); 831 channel.replace( QRegExp( ".*/" ), "" );
832 d->appName = channel; 832 d->appName = channel;
833 channel = "QPE/Application/" + channel; 833 channel = "QPE/Application/" + channel;
834 pidChannel = new QCopChannel( channel, this ); 834 pidChannel = new QCopChannel( channel, this );
835 connect( pidChannel, SIGNAL( received(const QCString&,const QByteArray&) ), 835 connect( pidChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
836 this, SLOT( pidMessage(const QCString&,const QByteArray&) ) ); 836 this, SLOT( pidMessage(const QCString&,const QByteArray&) ) );
837 837
838 if ( f.isOpen() ) { 838 if ( f.isOpen() ) {
839 d->keep_running = FALSE; 839 d->keep_running = FALSE;
840 QDataStream ds( &f ); 840 QDataStream ds( &f );
841 QCString channel, message; 841 QCString channel, message;
842 QByteArray data; 842 QByteArray data;
843 while ( !ds.atEnd() ) { 843 while ( !ds.atEnd() ) {
844 ds >> channel >> message >> data; 844 ds >> channel >> message >> data;
845 d->enqueueQCop( channel, message, data ); 845 d->enqueueQCop( channel, message, data );
846 } 846 }
847 847
848 flock( f.handle(), LOCK_UN ); 848 flock( f.handle(), LOCK_UN );
849 f.close(); 849 f.close();
850 f.remove(); 850 f.remove();
851 } 851 }
852 852
853 for ( int a = 0; a < argc; a++ ) { 853 for ( int a = 0; a < argc; a++ ) {
854 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 854 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
855 argv[ a ] = argv[ a + 1 ]; 855 argv[ a ] = argv[ a + 1 ];
856 a++; 856 a++;
857 d->preloaded = TRUE; 857 d->preloaded = TRUE;
858 argc -= 1; 858 argc -= 1;
859 } 859 }
860 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 860 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
861 argv[ a ] = argv[ a + 1 ]; 861 argv[ a ] = argv[ a + 1 ];
862 a++; 862 a++;
863 d->preloaded = TRUE; 863 d->preloaded = TRUE;
864 d->forceshow = TRUE; 864 d->forceshow = TRUE;
865 argc -= 1; 865 argc -= 1;
866 } 866 }
867 } 867 }
868 868
869 /* overide stored arguments */ 869 /* overide stored arguments */
870 setArgs( argc, argv ); 870 setArgs( argc, argv );
871 871
872#endif 872#endif
873#else 873#else
874 initApp( argc, argv ); 874 initApp( argc, argv );
875#endif 875#endif
876 // qwsSetDecoration( new QPEDecoration() ); 876 // qwsSetDecoration( new QPEDecoration() );
877 877
878#ifndef QT_NO_TRANSLATION 878#ifndef QT_NO_TRANSLATION
879 879
880 d->langs = Global::languageList(); 880 d->langs = Global::languageList();
881 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) { 881 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) {
882 QString lang = *it; 882 QString lang = *it;
883 883
884 installTranslation( lang + "/libopie.qm"); 884 installTranslation( lang + "/libopie.qm");
885 installTranslation( lang + "/libqpe.qm" ); 885 installTranslation( lang + "/libqpe.qm" );
886 installTranslation( lang + "/" + d->appName + ".qm" ); 886 installTranslation( lang + "/" + d->appName + ".qm" );
887 887
888 888
889 //###language/font hack; should look it up somewhere 889 //###language/font hack; should look it up somewhere
890#ifdef QWS 890#ifdef QWS
891 891
892 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 892 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
893 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 893 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
894 setFont( fn ); 894 setFont( fn );
895 } 895 }
896#endif 896#endif
897 } 897 }
898#endif 898#endif
899 899
900 applyStyle(); 900 applyStyle();
901 901
902 if ( type() == GuiServer ) { 902 if ( type() == GuiServer ) {
903 setVolume(); 903 setVolume();
904 } 904 }
905 905
906 installEventFilter( this ); 906 installEventFilter( this );
907 907
908 QPEMenuToolFocusManager::initialize(); 908 QPEMenuToolFocusManager::initialize();
909 909
910#ifdef QT_NO_QWS_CURSOR 910#ifdef QT_NO_QWS_CURSOR
911 // if we have no cursor, probably don't want tooltips 911 // if we have no cursor, probably don't want tooltips
912 QToolTip::setEnabled( FALSE ); 912 QToolTip::setEnabled( FALSE );
913#endif 913#endif
914} 914}
915 915
916 916
917#ifdef QTOPIA_INTERNAL_INITAPP 917#ifdef QTOPIA_INTERNAL_INITAPP
918void QPEApplication::initApp( int argc, char **argv ) 918void QPEApplication::initApp( int argc, char **argv )
919{ 919{
920 delete pidChannel; 920 delete pidChannel;
921 d->keep_running = TRUE; 921 d->keep_running = TRUE;
922 d->preloaded = FALSE; 922 d->preloaded = FALSE;
923 d->forceshow = FALSE; 923 d->forceshow = FALSE;
924 924
925 QCString channel = QCString(argv[0]); 925 QCString channel = QCString(argv[0]);
926 926
927 channel.replace(QRegExp(".*/"),""); 927 channel.replace(QRegExp(".*/"),"");
928 d->appName = channel; 928 d->appName = channel;
929 929
930 #if QT_VERSION > 235 930 #if QT_VERSION > 235
931 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6 931 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6
932 #endif 932 #endif
933 933
934 channel = "QPE/Application/" + channel; 934 channel = "QPE/Application/" + channel;
935 pidChannel = new QCopChannel( channel, this); 935 pidChannel = new QCopChannel( channel, this);
936 connect( pidChannel, SIGNAL(received(const QCString&,const QByteArray&)), 936 connect( pidChannel, SIGNAL(received(const QCString&,const QByteArray&)),
937 this, SLOT(pidMessage(const QCString&,const QByteArray&))); 937 this, SLOT(pidMessage(const QCString&,const QByteArray&)));
938 938
939 939
940 940
941 processQCopFile(); 941 processQCopFile();
942 d->keep_running = d->qcopq.isEmpty(); 942 d->keep_running = d->qcopq.isEmpty();
943 943
944 for (int a=0; a<argc; a++) { 944 for (int a=0; a<argc; a++) {
945 if ( qstrcmp(argv[a],"-preload")==0 ) { 945 if ( qstrcmp(argv[a],"-preload")==0 ) {
946 argv[a] = argv[a+1]; 946 argv[a] = argv[a+1];
947 a++; 947 a++;
948 d->preloaded = TRUE; 948 d->preloaded = TRUE;
949 argc-=1; 949 argc-=1;
950 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) { 950 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
951 argv[a] = argv[a+1]; 951 argv[a] = argv[a+1];
952 a++; 952 a++;
953 d->preloaded = TRUE; 953 d->preloaded = TRUE;
954 d->forceshow = TRUE; 954 d->forceshow = TRUE;
955 argc-=1; 955 argc-=1;
956 } 956 }
957 } 957 }
958 958
959 /* overide stored arguments */ 959 /* overide stored arguments */
960 setArgs(argc, argv); 960 setArgs(argc, argv);
961 961
962 /* install translation here */ 962 /* install translation here */
963 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) 963 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it )
964 installTranslation( (*it) + "/" + d->appName + ".qm" ); 964 installTranslation( (*it) + "/" + d->appName + ".qm" );
965} 965}
966#endif 966#endif
967 967
968 968
969static QPtrDict<void>* inputMethodDict = 0; 969static QPtrDict<void>* inputMethodDict = 0;
970static void createInputMethodDict() 970static void createInputMethodDict()
971{ 971{
972 if ( !inputMethodDict ) 972 if ( !inputMethodDict )
973 inputMethodDict = new QPtrDict<void>; 973 inputMethodDict = new QPtrDict<void>;
974} 974}
975 975
976/*! 976/*!
977 Returns the currently set hint to the system as to whether 977 Returns the currently set hint to the system as to whether
978 widget \a w has any use for text input methods. 978 widget \a w has any use for text input methods.
979 979
980 980
981 \sa setInputMethodHint() InputMethodHint 981 \sa setInputMethodHint() InputMethodHint
982*/ 982*/
983QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 983QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
984{ 984{
985 if ( inputMethodDict && w ) 985 if ( inputMethodDict && w )
986 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 986 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
987 return Normal; 987 return Normal;
988} 988}
989 989
990/*! 990/*!
991 \enum QPEApplication::InputMethodHint 991 \enum QPEApplication::InputMethodHint
992 992
993 \value Normal the application sometimes needs text input (the default). 993 \value Normal the application sometimes needs text input (the default).
994 \value AlwaysOff the application never needs text input. 994 \value AlwaysOff the application never needs text input.
995 \value AlwaysOn the application always needs text input. 995 \value AlwaysOn the application always needs text input.
996*/ 996*/
997 997
998/*! 998/*!
999 Hints to the system that widget \a w has use for text input methods 999 Hints to the system that widget \a w has use for text input methods
1000 as specified by \a mode. 1000 as specified by \a mode.
1001 1001
1002 \sa inputMethodHint() InputMethodHint 1002 \sa inputMethodHint() InputMethodHint
1003*/ 1003*/
1004void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 1004void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
1005{ 1005{
1006 createInputMethodDict(); 1006 createInputMethodDict();
1007 if ( mode == Normal ) { 1007 if ( mode == Normal ) {
1008 inputMethodDict->remove 1008 inputMethodDict->remove
1009 ( w ); 1009 ( w );
1010 } 1010 }
1011 else { 1011 else {
1012 inputMethodDict->insert( w, ( void* ) mode ); 1012 inputMethodDict->insert( w, ( void* ) mode );
1013 } 1013 }
1014} 1014}
1015 1015
1016class HackDialog : public QDialog 1016class HackDialog : public QDialog
1017{ 1017{
1018public: 1018public:
1019 void acceptIt() 1019 void acceptIt()
1020 { 1020 {
1021 accept(); 1021 accept();
1022 } 1022 }
1023 void rejectIt() 1023 void rejectIt()
1024 { 1024 {
1025 reject(); 1025 reject();
1026 } 1026 }
1027}; 1027};
1028 1028
1029 1029
1030void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 1030void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
1031{ 1031{
1032 // specialised actions for certain widgets. May want to 1032 // specialised actions for certain widgets. May want to
1033 // add more stuff here. 1033 // add more stuff here.
1034 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 1034 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
1035 && activePopupWidget() ->parentWidget() 1035 && activePopupWidget() ->parentWidget()
1036 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 1036 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
1037 key = Qt::Key_Return; 1037 key = Qt::Key_Return;
1038 1038
1039 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 1039 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
1040 key = Qt::Key_Return; 1040 key = Qt::Key_Return;
1041 1041
1042#ifdef QWS 1042#ifdef QWS
1043 1043
1044 ke->simpleData.keycode = key; 1044 ke->simpleData.keycode = key;
1045#endif 1045#endif
1046} 1046}
1047 1047
1048// class HackWidget : public QWidget
1049// {
1050// public:
1051 // bool needsOk()
1052 // {
1053 // return ( getWState() & WState_Reserved1 );
1054 // }
1055// };
1056 1048
1057/*! 1049/*!
1058 \internal 1050 \internal
1059*/ 1051*/
1060 1052
1061#ifdef QWS 1053#ifdef QWS
1062bool QPEApplication::qwsEventFilter( QWSEvent * e ) 1054bool QPEApplication::qwsEventFilter( QWSEvent * e )
1063{ 1055{
1064 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 1056 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
1065 if ( qApp->type() != QApplication::GuiServer ) { 1057 if ( qApp->type() != QApplication::GuiServer ) {
1066 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 1058 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
1067 e << d->appName; 1059 e << d->appName;
1068 } 1060 }
1069 d->notbusysent = TRUE; 1061 d->notbusysent = TRUE;
1070 } 1062 }
1071 if ( type() == GuiServer ) { 1063 if ( type() == GuiServer ) {
1072 switch ( e->type ) { 1064 switch ( e->type ) {
1073 case QWSEvent::Mouse: 1065 case QWSEvent::Mouse:
1074 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 1066 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
1075 emit clientMoused(); 1067 emit clientMoused();
1076 break; 1068 break;
1077 default: 1069 default:
1078 break; 1070 break;
1079 } 1071 }
1080 } 1072 }
1081 if ( e->type == QWSEvent::Key ) { 1073 if ( e->type == QWSEvent::Key ) {
1082 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 1074 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
1083 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 1075 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
1084 // Use special "OK" key to press "OK" on top level widgets 1076 // Use special "OK" key to press "OK" on top level widgets
1085 QWidget * active = activeWindow(); 1077 QWidget * active = activeWindow();
1086 QWidget *popup = 0; 1078 QWidget *popup = 0;
1087 if ( active && active->isPopup() ) { 1079 if ( active && active->isPopup() ) {
1088 popup = active; 1080 popup = active;
1089 active = active->parentWidget(); 1081 active = active->parentWidget();
1090 } 1082 }
1091 if ( active && ( int ) active->winId() == ke->simpleData.window && 1083 if ( active && ( int ) active->winId() == ke->simpleData.window &&
1092 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 1084 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
1093 if ( ke->simpleData.is_press ) { 1085 if ( ke->simpleData.is_press ) {
1094 if ( popup ) 1086 if ( popup )
1095 popup->close(); 1087 popup->close();
1096 if ( active->inherits( "QDialog" ) ) { 1088 if ( active->inherits( "QDialog" ) ) {
1097 HackDialog * d = ( HackDialog * ) active; 1089 HackDialog * d = ( HackDialog * ) active;
1098 d->acceptIt(); 1090 d->acceptIt();
1099 return TRUE; 1091 return TRUE;
1100 } 1092 }
1101 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 1093 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
1102 QSignal s; 1094 QSignal s;
1103 s.connect( active, SLOT( accept() ) ); 1095 s.connect( active, SLOT( accept() ) );
1104 s.activate(); 1096 s.activate();
1105 } 1097 }
1106 else { 1098 else {
1107 // do the same as with the select key: Map to the default action of the widget: 1099 // do the same as with the select key: Map to the default action of the widget:
1108 mapToDefaultAction( ke, Qt::Key_Return ); 1100 mapToDefaultAction( ke, Qt::Key_Return );
1109 } 1101 }
1110 } 1102 }
1111 } 1103 }
1112 } 1104 }
1113 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 1105 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
1114 // Use special "select" key to do whatever default action a widget has 1106 // Use special "select" key to do whatever default action a widget has
1115 mapToDefaultAction( ke, Qt::Key_Space ); 1107 mapToDefaultAction( ke, Qt::Key_Space );
1116 } 1108 }
1117 else if ( ke->simpleData.keycode == Qt::Key_Escape && 1109 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
1118 ke->simpleData.is_press ) { 1110 ke->simpleData.is_press ) {
1119 // Escape key closes app if focus on toplevel 1111 // Escape key closes app if focus on toplevel
1120 QWidget * active = activeWindow(); 1112 QWidget * active = activeWindow();
1121 if ( active && active->testWFlags( WType_TopLevel ) && 1113 if ( active && active->testWFlags( WType_TopLevel ) &&
1122 ( int ) active->winId() == ke->simpleData.window && 1114 ( int ) active->winId() == ke->simpleData.window &&
1123 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 1115 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
1124 if ( active->inherits( "QDialog" ) ) { 1116 if ( active->inherits( "QDialog" ) ) {
1117 qDebug("dialog hack");
1125 HackDialog * d = ( HackDialog * ) active; 1118 HackDialog * d = ( HackDialog * ) active;
1126 d->rejectIt(); 1119 d->rejectIt();
1127 return TRUE; 1120 return TRUE;
1128 } 1121 }
1129 } 1122 }
1130 } 1123 }
1131 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { 1124 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) {
1132 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) 1125 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... ))
1133 // but we cannot access libopie function within libqpe :( 1126 // but we cannot access libopie function within libqpe :(
1134 1127
1135 QWidget * active = activeWindow ( ); 1128 QWidget * active = activeWindow ( );
1136 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { 1129 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) {
1137 if ( d-> kbgrabbed ) { // we grabbed the keyboard 1130 if ( d-> kbgrabbed ) { // we grabbed the keyboard
1138 QChar ch ( ke-> simpleData.unicode ); 1131 QChar ch ( ke-> simpleData.unicode );
1139 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, 1132 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease,
1140 ke-> simpleData.keycode, 1133 ke-> simpleData.keycode,
1141 ch. latin1 ( ), 1134 ch. latin1 ( ),
1142 ke-> simpleData.modifiers, 1135 ke-> simpleData.modifiers,
1143 QString ( ch ), 1136 QString ( ch ),
1144 ke-> simpleData.is_auto_repeat, 1 ); 1137 ke-> simpleData.is_auto_repeat, 1 );
1145 1138
1146 QObject *which = QWidget::keyboardGrabber ( ); 1139 QObject *which = QWidget::keyboardGrabber ( );
1147 if ( !which ) 1140 if ( !which )
1148 which = QApplication::focusWidget ( ); 1141 which = QApplication::focusWidget ( );
1149 if ( !which ) 1142 if ( !which )
1150 which = QApplication::activeWindow ( ); 1143 which = QApplication::activeWindow ( );
1151 if ( !which ) 1144 if ( !which )
1152 which = qApp; 1145 which = qApp;
1153 1146
1154 QApplication::sendEvent ( which, &qke ); 1147 QApplication::sendEvent ( which, &qke );
1155 } 1148 }
1156 else { // we didn't grab the keyboard, so send the event to the launcher 1149 else { // we didn't grab the keyboard, so send the event to the launcher
1157 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); 1150 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" );
1158 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat ); 1151 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat );
1159 } 1152 }
1160 } 1153 }
1161 return true; 1154 return true;
1162 } 1155 }
1163 } 1156 }
1164 if ( e->type == QWSEvent::Focus ) { 1157 if ( e->type == QWSEvent::Focus ) {
1165 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 1158 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
1166 if ( !fe->simpleData.get_focus ) { 1159 if ( !fe->simpleData.get_focus ) {
1167 QWidget * active = activeWindow(); 1160 QWidget * active = activeWindow();
1168 while ( active && active->isPopup() ) { 1161 while ( active && active->isPopup() ) {
1169 active->close(); 1162 active->close();
1170 active = activeWindow(); 1163 active = activeWindow();
1171 } 1164 }
1172 } 1165 }
1173 else { 1166 else {
1174 // make sure our modal widget is ALWAYS on top 1167 // make sure our modal widget is ALWAYS on top
1175 QWidget *topm = activeModalWidget(); 1168 QWidget *topm = activeModalWidget();
1176 if ( topm && static_cast<int>( topm->winId() ) != fe->simpleData.window) { 1169 if ( topm && static_cast<int>( topm->winId() ) != fe->simpleData.window) {
1177 topm->raise(); 1170 topm->raise();
1178 } 1171 }
1179 } 1172 }
1180 if ( fe->simpleData.get_focus && inputMethodDict ) { 1173 if ( fe->simpleData.get_focus && inputMethodDict ) {
1181 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 1174 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
1182 if ( m == AlwaysOff ) 1175 if ( m == AlwaysOff )
1183 Global::hideInputMethod(); 1176 Global::hideInputMethod();
1184 if ( m == AlwaysOn ) 1177 if ( m == AlwaysOn )
1185 Global::showInputMethod(); 1178 Global::showInputMethod();
1186 } 1179 }
1187 } 1180 }
1188 1181
1189 1182
1190 return QApplication::qwsEventFilter( e ); 1183 return QApplication::qwsEventFilter( e );
1191} 1184}
1192#endif 1185#endif
1193 1186
1194/*! 1187/*!
1195 Destroys the QPEApplication. 1188 Destroys the QPEApplication.
1196*/ 1189*/
1197QPEApplication::~QPEApplication() 1190QPEApplication::~QPEApplication()
1198{ 1191{
1199 ungrabKeyboard(); 1192 ungrabKeyboard();
1200#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 1193#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
1201 // Need to delete QCopChannels early, since the display will 1194 // Need to delete QCopChannels early, since the display will
1202 // be gone by the time we get to ~QObject(). 1195 // be gone by the time we get to ~QObject().
1203 delete sysChannel; 1196 delete sysChannel;
1204 delete pidChannel; 1197 delete pidChannel;
1205#endif 1198#endif
1206 1199
1207 delete d; 1200 delete d;
1208} 1201}
1209 1202
1210/*! 1203/*!
1211 Returns <tt>$OPIEDIR/</tt>. 1204 Returns <tt>$OPIEDIR/</tt>.
1212*/ 1205*/
1213QString QPEApplication::qpeDir() 1206QString QPEApplication::qpeDir()
1214{ 1207{
1215 const char * base = getenv( "OPIEDIR" ); 1208 const char * base = getenv( "OPIEDIR" );
1216 if ( base ) 1209 if ( base )
1217 return QString( base ) + "/"; 1210 return QString( base ) + "/";
1218 1211
1219 return QString( "../" ); 1212 return QString( "../" );
1220} 1213}
1221 1214
1222/*! 1215/*!
1223 Returns the user's current Document directory. There is a trailing "/". 1216 Returns the user's current Document directory. There is a trailing "/".
1224 .. well, it does now,, and there's no trailing '/' 1217 .. well, it does now,, and there's no trailing '/'
1225*/ 1218*/
1226QString QPEApplication::documentDir() 1219QString QPEApplication::documentDir()
1227{ 1220{
1228 const char* base = getenv( "HOME"); 1221 const char* base = getenv( "HOME");
1229 if ( base ) 1222 if ( base )
1230 return QString( base ) + "/Documents"; 1223 return QString( base ) + "/Documents";
1231 1224
1232 return QString( "../Documents" ); 1225 return QString( "../Documents" );
1233} 1226}
1234 1227
1235static int deforient = -1; 1228static int deforient = -1;
1236 1229
1237/*! 1230/*!
1238 \internal 1231 \internal
1239*/ 1232*/
1240int QPEApplication::defaultRotation() 1233int QPEApplication::defaultRotation()
1241{ 1234{
1242 if ( deforient < 0 ) { 1235 if ( deforient < 0 ) {
1243 QString d = getenv( "QWS_DISPLAY" ); 1236 QString d = getenv( "QWS_DISPLAY" );
1244 if ( d.contains( "Rot90" ) ) { 1237 if ( d.contains( "Rot90" ) ) {
1245 deforient = 90; 1238 deforient = 90;
1246 } 1239 }
1247 else if ( d.contains( "Rot180" ) ) { 1240 else if ( d.contains( "Rot180" ) ) {
1248 deforient = 180; 1241 deforient = 180;
1249 } 1242 }
1250 else if ( d.contains( "Rot270" ) ) { 1243 else if ( d.contains( "Rot270" ) ) {
1251 deforient = 270; 1244 deforient = 270;
1252 } 1245 }
1253 else { 1246 else {
1254 deforient = 0; 1247 deforient = 0;
1255 } 1248 }
1256 } 1249 }
1257 return deforient; 1250 return deforient;
1258} 1251}
1259 1252
1260/*! 1253/*!
1261 \internal 1254 \internal
1262*/ 1255*/
1263void QPEApplication::setDefaultRotation( int r ) 1256void QPEApplication::setDefaultRotation( int r )
1264{ 1257{
1265 if ( qApp->type() == GuiServer ) { 1258 if ( qApp->type() == GuiServer ) {
1266 deforient = r; 1259 deforient = r;
1267 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 1260 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
1268 Config config("qpe"); 1261 Config config("qpe");
1269 config.setGroup( "Rotation" ); 1262 config.setGroup( "Rotation" );
1270 config.writeEntry( "Rot", r ); 1263 config.writeEntry( "Rot", r );
1271 } 1264 }
1272 else { 1265 else {
1273#ifndef QT_NO_COP 1266#ifndef QT_NO_COP
1274 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 1267 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
1275 e << r; 1268 e << r;
1276 } 1269 }
1277#endif 1270#endif
1278 1271
1279 } 1272 }
1280} 1273}
1281 1274
1282#include <qgfx_qws.h> 1275#include <qgfx_qws.h>
1283#include <qwindowsystem_qws.h> 1276#include <qwindowsystem_qws.h>
1284 1277
1285extern void qws_clearLoadedFonts(); 1278extern void qws_clearLoadedFonts();
1286 1279
1287void QPEApplication::setCurrentMode( int x, int y, int depth ) 1280void QPEApplication::setCurrentMode( int x, int y, int depth )
1288{ 1281{
1289 // Reset the caches 1282 // Reset the caches
1290 qws_clearLoadedFonts(); 1283 qws_clearLoadedFonts();
1291 QPixmapCache::clear(); 1284 QPixmapCache::clear();
1292 1285
1293 // Change the screen mode 1286 // Change the screen mode
1294 qt_screen->setMode(x, y, depth); 1287 qt_screen->setMode(x, y, depth);
1295 1288
1296 if ( qApp->type() == GuiServer ) { 1289 if ( qApp->type() == GuiServer ) {
1297 // Reconfigure the GuiServer 1290 // Reconfigure the GuiServer
1298 qwsServer->beginDisplayReconfigure(); 1291 qwsServer->beginDisplayReconfigure();
1299 qwsServer->endDisplayReconfigure(); 1292 qwsServer->endDisplayReconfigure();
1300 1293
1301 // Get all the running apps to reset 1294 // Get all the running apps to reset
1302 QCopEnvelope env( "QPE/System", "reset()" ); 1295 QCopEnvelope env( "QPE/System", "reset()" );
1303 } 1296 }
1304} 1297}
1305 1298
1306void QPEApplication::reset() { 1299void QPEApplication::reset() {
1307 // Reconnect to the screen 1300 // Reconnect to the screen
1308 qt_screen->disconnect(); 1301 qt_screen->disconnect();
1309 qt_screen->connect( QString::null ); 1302 qt_screen->connect( QString::null );
1310 1303
1311 // Redraw everything 1304 // Redraw everything
1312 applyStyle(); 1305 applyStyle();
1313} 1306}
1314 1307
1315/*! 1308/*!
1316 \internal 1309 \internal
1317*/ 1310*/
1318void QPEApplication::applyStyle() 1311void QPEApplication::applyStyle()
1319{ 1312{
1320 Config config( "qpe" ); 1313 Config config( "qpe" );
1321 config.setGroup( "Appearance" ); 1314 config.setGroup( "Appearance" );
1322 1315
1323#if QT_VERSION > 233 1316#if QT_VERSION > 233
1324#if !defined(OPIE_NO_OVERRIDE_QT) 1317#if !defined(OPIE_NO_OVERRIDE_QT)
1325 // don't block ourselves ... 1318 // don't block ourselves ...
1326 Opie::force_appearance = 0; 1319 Opie::force_appearance = 0;
1327 1320
1328 static QString appname = Opie::binaryName ( ); 1321 static QString appname = Opie::binaryName ( );
1329 1322
1330 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 1323 QStringList ex = config. readListEntry ( "NoStyle", ';' );
1331 int nostyle = 0; 1324 int nostyle = 0;
1332 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 1325 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
1333 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 1326 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
1334 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 1327 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
1335 break; 1328 break;
1336 } 1329 }
1337 } 1330 }
1338#else 1331#else
1339 int nostyle = 0; 1332 int nostyle = 0;
1340#endif 1333#endif
1341 1334
1342 // Widget style 1335 // Widget style
1343 QString style = config.readEntry( "Style", "FlatStyle" ); 1336 QString style = config.readEntry( "Style", "FlatStyle" );
1344 1337
1345 // don't set a custom style 1338 // don't set a custom style
1346 if ( nostyle & Opie::Force_Style ) 1339 if ( nostyle & Opie::Force_Style )
1347 style = "FlatStyle"; 1340 style = "FlatStyle";
1348 1341
1349 internalSetStyle ( style ); 1342 internalSetStyle ( style );
1350 1343
1351 // Colors - from /etc/colors/Liquid.scheme 1344 // Colors - from /etc/colors/Liquid.scheme
1352 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) ); 1345 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) );
1353 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) ); 1346 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) );
1354 QPalette pal( btncolor, bgcolor ); 1347 QPalette pal( btncolor, bgcolor );
1355 QString color = config.readEntry( "Highlight", "#73adef" ); 1348 QString color = config.readEntry( "Highlight", "#73adef" );
1356 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 1349 pal.setColor( QColorGroup::Highlight, QColor( color ) );
1357 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 1350 color = config.readEntry( "HighlightedText", "#FFFFFF" );
1358 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 1351 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
1359 color = config.readEntry( "Text", "#000000" ); 1352 color = config.readEntry( "Text", "#000000" );
1360 pal.setColor( QColorGroup::Text, QColor( color ) ); 1353 pal.setColor( QColorGroup::Text, QColor( color ) );
1361 color = config.readEntry( "ButtonText", "#000000" ); 1354 color = config.readEntry( "ButtonText", "#000000" );
1362 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 1355 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
1363 color = config.readEntry( "Base", "#FFFFFF" ); 1356 color = config.readEntry( "Base", "#FFFFFF" );
1364 pal.setColor( QColorGroup::Base, QColor( color ) ); 1357 pal.setColor( QColorGroup::Base, QColor( color ) );
1365 1358
1366 pal.setColor( QPalette::Disabled, QColorGroup::Text, 1359 pal.setColor( QPalette::Disabled, QColorGroup::Text,
1367 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 1360 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
1368 1361
1369 setPalette( pal, TRUE ); 1362 setPalette( pal, TRUE );
1370 1363
1371 // Window Decoration 1364 // Window Decoration
1372 QString dec = config.readEntry( "Decoration", "Flat" ); 1365 QString dec = config.readEntry( "Decoration", "Flat" );
1373 1366
1374 // don't set a custom deco 1367 // don't set a custom deco
1375 if ( nostyle & Opie::Force_Decoration ) 1368 if ( nostyle & Opie::Force_Decoration )
1376 dec = ""; 1369 dec = "";
1377 1370
1378 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle); 1371 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
1379 1372
1380 if ( dec != d->decorationName ) { 1373 if ( dec != d->decorationName ) {
1381 qwsSetDecoration( new QPEDecoration( dec ) ); 1374 qwsSetDecoration( new QPEDecoration( dec ) );
1382 d->decorationName = dec; 1375 d->decorationName = dec;
1383 } 1376 }
1384 1377
1385 // Font 1378 // Font
1386 QString ff = config.readEntry( "FontFamily", font().family() ); 1379 QString ff = config.readEntry( "FontFamily", font().family() );
1387 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 1380 int fs = config.readNumEntry( "FontSize", font().pointSize() );
1388 1381
1389 // don't set a custom font 1382 // don't set a custom font
1390 if ( nostyle & Opie::Force_Font ) { 1383 if ( nostyle & Opie::Force_Font ) {
1391 ff = "Vera"; 1384 ff = "Vera";
1392 fs = 10; 1385 fs = 10;
1393 } 1386 }
1394 1387
1395 setFont ( QFont ( ff, fs ), true ); 1388 setFont ( QFont ( ff, fs ), true );
1396 1389
1397#if !defined(OPIE_NO_OVERRIDE_QT) 1390#if !defined(OPIE_NO_OVERRIDE_QT)
1398 // revert to global blocking policy ... 1391 // revert to global blocking policy ...
1399 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None; 1392 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None;
1400 Opie::force_appearance &= ~nostyle; 1393 Opie::force_appearance &= ~nostyle;
1401#endif 1394#endif
1402#endif 1395#endif
1403} 1396}
1404 1397
1405void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1398void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1406{ 1399{
1407#ifdef Q_WS_QWS 1400#ifdef Q_WS_QWS
1408 QDataStream stream( data, IO_ReadOnly ); 1401 QDataStream stream( data, IO_ReadOnly );
1409 if ( msg == "applyStyle()" ) { 1402 if ( msg == "applyStyle()" ) {
1410 applyStyle(); 1403 applyStyle();
1411 } 1404 }
1412 else if ( msg == "toggleApplicationMenu()" ) { 1405 else if ( msg == "toggleApplicationMenu()" ) {
1413 QWidget *active = activeWindow ( ); 1406 QWidget *active = activeWindow ( );
1414 1407
1415 if ( active ) { 1408 if ( active ) {
1416 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( ); 1409 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( );
1417 bool oldactive = man-> isActive ( ); 1410 bool oldactive = man-> isActive ( );
1418 1411
1419 man-> setActive( !man-> isActive() ); 1412 man-> setActive( !man-> isActive() );
1420 1413
1421 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu 1414 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu
1422 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" ); 1415 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" );
1423 } 1416 }
1424 } 1417 }
1425 } 1418 }
1426 else if ( msg == "setDefaultRotation(int)" ) { 1419 else if ( msg == "setDefaultRotation(int)" ) {
1427 if ( type() == GuiServer ) { 1420 if ( type() == GuiServer ) {
1428 int r; 1421 int r;
1429 stream >> r; 1422 stream >> r;
1430 setDefaultRotation( r ); 1423 setDefaultRotation( r );
1431 } 1424 }
1432 } 1425 }
1433 else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net> 1426 else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net>
1434 if ( type() == GuiServer ) { 1427 if ( type() == GuiServer ) {
1435 int x, y, depth; 1428 int x, y, depth;
1436 stream >> x; 1429 stream >> x;
1437 stream >> y; 1430 stream >> y;
1438 stream >> depth; 1431 stream >> depth;
1439 setCurrentMode( x, y, depth ); 1432 setCurrentMode( x, y, depth );
1440 } 1433 }
1441 } 1434 }
1442 else if ( msg == "reset()" ) { 1435 else if ( msg == "reset()" ) {
1443 if ( type() != GuiServer ) 1436 if ( type() != GuiServer )
1444 reset(); 1437 reset();
1445 } 1438 }
1446 else if ( msg == "setCurrentRotation(int)" ) { 1439 else if ( msg == "setCurrentRotation(int)" ) {
1447 int r; 1440 int r;
1448 stream >> r; 1441 stream >> r;
1449 setCurrentRotation( r ); 1442 setCurrentRotation( r );
1450 } 1443 }
1451 else if ( msg == "shutdown()" ) { 1444 else if ( msg == "shutdown()" ) {
1452 if ( type() == GuiServer ) 1445 if ( type() == GuiServer )
1453 shutdown(); 1446 shutdown();
1454 } 1447 }
1455 else if ( msg == "quit()" ) { 1448 else if ( msg == "quit()" ) {
1456 if ( type() != GuiServer ) 1449 if ( type() != GuiServer )
1457 tryQuit(); 1450 tryQuit();
1458 } 1451 }
1459 else if ( msg == "forceQuit()" ) { 1452 else if ( msg == "forceQuit()" ) {
1460 if ( type() != GuiServer ) 1453 if ( type() != GuiServer )
1461 quit(); 1454 quit();
1462 } 1455 }
1463 else if ( msg == "restart()" ) { 1456 else if ( msg == "restart()" ) {
1464 if ( type() == GuiServer ) 1457 if ( type() == GuiServer )
1465 restart(); 1458 restart();
1466 } 1459 }
1467 else if ( msg == "language(QString)" ) { 1460 else if ( msg == "language(QString)" ) {
1468 if ( type() == GuiServer ) { 1461 if ( type() == GuiServer ) {
1469 QString l; 1462 QString l;
1470 stream >> l; 1463 stream >> l;
1471 QString cl = getenv( "LANG" ); 1464 QString cl = getenv( "LANG" );
1472 if ( cl != l ) { 1465 if ( cl != l ) {
1473 if ( l.isNull() ) 1466 if ( l.isNull() )
1474 unsetenv( "LANG" ); 1467 unsetenv( "LANG" );
1475 else 1468 else
1476 setenv( "LANG", l.latin1(), 1 ); 1469 setenv( "LANG", l.latin1(), 1 );
1477 restart(); 1470 restart();
1478 } 1471 }
1479 } 1472 }
1480 } 1473 }
1481 else if ( msg == "timeChange(QString)" ) { 1474 else if ( msg == "timeChange(QString)" ) {
1482 QString t; 1475 QString t;
1483 stream >> t; 1476 stream >> t;
1484 if ( t.isNull() ) 1477 if ( t.isNull() )
1485 unsetenv( "TZ" ); 1478 unsetenv( "TZ" );
1486 else 1479 else
1487 setenv( "TZ", t.latin1(), 1 ); 1480 setenv( "TZ", t.latin1(), 1 );
1488 // emit the signal so everyone else knows... 1481 // emit the signal so everyone else knows...
1489 emit timeChanged(); 1482 emit timeChanged();
1490 } 1483 }
1491 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1484 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1492 if ( type() == GuiServer ) { 1485 if ( type() == GuiServer ) {
1493 QDateTime when; 1486 QDateTime when;
1494 QCString channel, message; 1487 QCString channel, message;
1495 int data; 1488 int data;
1496 stream >> when >> channel >> message >> data; 1489 stream >> when >> channel >> message >> data;
1497 AlarmServer::addAlarm( when, channel, message, data ); 1490 AlarmServer::addAlarm( when, channel, message, data );
1498 } 1491 }
1499 } 1492 }
1500 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1493 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1501 if ( type() == GuiServer ) { 1494 if ( type() == GuiServer ) {
1502 QDateTime when; 1495 QDateTime when;
1503 QCString channel, message; 1496 QCString channel, message;
1504 int data; 1497 int data;
1505 stream >> when >> channel >> message >> data; 1498 stream >> when >> channel >> message >> data;
1506 AlarmServer::deleteAlarm( when, channel, message, data ); 1499 AlarmServer::deleteAlarm( when, channel, message, data );
1507 } 1500 }
1508 } 1501 }
1509 else if ( msg == "clockChange(bool)" ) { 1502 else if ( msg == "clockChange(bool)" ) {
1510 int tmp; 1503 int tmp;
1511 stream >> tmp; 1504 stream >> tmp;
1512 emit clockChanged( tmp ); 1505 emit clockChanged( tmp );
1513 } 1506 }
1514 else if ( msg == "weekChange(bool)" ) { 1507 else if ( msg == "weekChange(bool)" ) {
1515 int tmp; 1508 int tmp;
1516 stream >> tmp; 1509 stream >> tmp;
1517 emit weekChanged( tmp ); 1510 emit weekChanged( tmp );
1518 } 1511 }
1519 else if ( msg == "setDateFormat(DateFormat)" ) { 1512 else if ( msg == "setDateFormat(DateFormat)" ) {
1520 DateFormat tmp; 1513 DateFormat tmp;
1521 stream >> tmp; 1514 stream >> tmp;
1522 emit dateFormatChanged( tmp ); 1515 emit dateFormatChanged( tmp );
1523 } 1516 }
1524 else if ( msg == "setVolume(int,int)" ) { 1517 else if ( msg == "setVolume(int,int)" ) {
1525 int t, v; 1518 int t, v;
1526 stream >> t >> v; 1519 stream >> t >> v;
1527 setVolume( t, v ); 1520 setVolume( t, v );
1528 emit volumeChanged( muted ); 1521 emit volumeChanged( muted );
1529 } 1522 }
1530 else if ( msg == "volumeChange(bool)" ) { 1523 else if ( msg == "volumeChange(bool)" ) {
1531 stream >> muted; 1524 stream >> muted;
1532 setVolume(); 1525 setVolume();
1533 emit volumeChanged( muted ); 1526 emit volumeChanged( muted );
1534 } 1527 }
1535 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1528 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1536 int t, v; 1529 int t, v;
1537 stream >> t >> v; 1530 stream >> t >> v;
1538 setMic( t, v ); 1531 setMic( t, v );
1539 emit micChanged( micMuted ); 1532 emit micChanged( micMuted );
1540 } 1533 }
1541 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1534 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1542 stream >> micMuted; 1535 stream >> micMuted;
1543 setMic(); 1536 setMic();
1544 emit micChanged( micMuted ); 1537 emit micChanged( micMuted );
1545 } 1538 }
1546 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1539 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1547 int t, v; 1540 int t, v;
1548 stream >> t >> v; 1541 stream >> t >> v;
1549 setBass( t, v ); 1542 setBass( t, v );
1550 } 1543 }
1551 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1544 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1552 setBass(); 1545 setBass();
1553 } 1546 }
1554 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1547 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1555 int t, v; 1548 int t, v;
1556 stream >> t >> v; 1549 stream >> t >> v;
1557 setTreble( t, v ); 1550 setTreble( t, v );
1558 } 1551 }
1559 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1552 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1560 setTreble(); 1553 setTreble();
1561 } else if ( msg == "getMarkedText()" ) { 1554 } else if ( msg == "getMarkedText()" ) {
1562 if ( type() == GuiServer ) { 1555 if ( type() == GuiServer ) {
1563 const ushort unicode = 'C'-'@'; 1556 const ushort unicode = 'C'-'@';
1564 const int scan = Key_C; 1557 const int scan = Key_C;
1565 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); 1558 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
1566 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); 1559 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
1567 } 1560 }
1568 } else if ( msg == "newChannel(QString)") { 1561 } else if ( msg == "newChannel(QString)") {
1569 QString myChannel = "QPE/Application/" + d->appName; 1562 QString myChannel = "QPE/Application/" + d->appName;
1570 QString channel; 1563 QString channel;
1571 stream >> channel; 1564 stream >> channel;
1572 if (channel == myChannel) { 1565 if (channel == myChannel) {
1573 processQCopFile(); 1566 processQCopFile();
1574 d->sendQCopQ(); 1567 d->sendQCopQ();
1575 } 1568 }
1576 } 1569 }
1577 1570
1578 1571
1579#endif 1572#endif
1580} 1573}
1581 1574
1582 1575
1583 1576
1584 1577
1585 1578
1586/*! 1579/*!
1587 \internal 1580 \internal
1588*/ 1581*/
1589bool QPEApplication::raiseAppropriateWindow() 1582bool QPEApplication::raiseAppropriateWindow()
1590{ 1583{
1591 bool r=FALSE; 1584 bool r=FALSE;
1592 1585
1593 // 1. Raise the main widget 1586 // 1. Raise the main widget
1594 QWidget *top = d->qpe_main_widget; 1587 QWidget *top = d->qpe_main_widget;
1595 if ( !top ) top = mainWidget(); 1588 if ( !top ) top = mainWidget();
1596 1589
1597 if ( top && d->keep_running ) { 1590 if ( top && d->keep_running ) {
1598 if ( top->isVisible() ) 1591 if ( top->isVisible() )
1599 r = TRUE; 1592 r = TRUE;
1600 else if (d->preloaded) { 1593 else if (d->preloaded) {
1601 // We are preloaded and not visible.. pretend we just started.. 1594 // We are preloaded and not visible.. pretend we just started..
1602#ifndef QT_NO_COP 1595#ifndef QT_NO_COP
1603 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1596 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1604 e << d->appName; 1597 e << d->appName;
1605#endif 1598#endif
1606 } 1599 }
1607 1600
1608 d->show_mx(top,d->nomaximize, d->appName); 1601 d->show_mx(top,d->nomaximize, d->appName);
1609 top->raise(); 1602 top->raise();
1610 } 1603 }
1611 1604
1612 QWidget *topm = activeModalWidget(); 1605 QWidget *topm = activeModalWidget();
1613 1606
1614 // 2. Raise any parentless widgets (except top and topm, as they 1607 // 2. Raise any parentless widgets (except top and topm, as they
1615 // are raised before and after this loop). Order from most 1608 // are raised before and after this loop). Order from most
1616 // recently raised as deepest to least recently as top, so 1609 // recently raised as deepest to least recently as top, so
1617 // that repeated calls cycle through widgets. 1610 // that repeated calls cycle through widgets.
1618 QWidgetList *list = topLevelWidgets(); 1611 QWidgetList *list = topLevelWidgets();
1619 if ( list ) { 1612 if ( list ) {
1620 bool foundlast = FALSE; 1613 bool foundlast = FALSE;
1621 QWidget* topsub = 0; 1614 QWidget* topsub = 0;
1622 if ( d->lastraised ) { 1615 if ( d->lastraised ) {
1623 for (QWidget* w = list->first(); w; w = list->next()) { 1616 for (QWidget* w = list->first(); w; w = list->next()) {
1624 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1617 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1625 if ( w == d->lastraised ) 1618 if ( w == d->lastraised )
1626 foundlast = TRUE; 1619 foundlast = TRUE;
1627 if ( foundlast ) { 1620 if ( foundlast ) {
1628 w->raise(); 1621 w->raise();
1629 topsub = w; 1622 topsub = w;
1630 } 1623 }
1631 } 1624 }
1632 } 1625 }
1633 } 1626 }
1634 for (QWidget* w = list->first(); w; w = list->next()) { 1627 for (QWidget* w = list->first(); w; w = list->next()) {
1635 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1628 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1636 if ( w == d->lastraised ) 1629 if ( w == d->lastraised )