summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/global.cpp16
-rw-r--r--library/qpeapplication.cpp60
2 files changed, 72 insertions, 4 deletions
diff --git a/library/global.cpp b/library/global.cpp
index 9b3c51e..42c2729 100644
--- a/library/global.cpp
+++ b/library/global.cpp
@@ -559,105 +559,121 @@ void Global::invoke(const QString &c)
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 extern bool opie_block_style;
610
611 QString newpre = QPEApplication::qpeDir ( ) + "/lib/libpreload.so";
612 if ( opie_block_style && QFile::exists ( newpre )) {
613 if ( oldpre && oldpre [0] )
614 newpre = newpre + ":" + oldpre;
615 ::setenv ( "LD_PRELOAD", newpre. latin1( ), 1 );
616 qDebug ( "\nPRELOADING\n" );
617 }
618
607 if ( !::vfork() ) { 619 if ( !::vfork() ) {
608 for ( int fd = 3; fd < 100; fd++ ) 620 for ( int fd = 3; fd < 100; fd++ )
609 ::close( fd ); 621 ::close( fd );
610 ::setpgid( ::getpid(), ::getppid() ); 622 ::setpgid( ::getpid(), ::getppid() );
611 // Try bindir first, so that foo/bar works too 623 // Try bindir first, so that foo/bar works too
612 ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args ); 624 ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args );
613 ::execvp( args[0], (char * const *)args ); 625 ::execvp( args[0], (char * const *)args );
614 _exit( -1 ); 626 _exit( -1 );
615 } 627 }
628 if ( oldpre )
629 ::setenv ( "LD_PRELOAD", oldpre, 1 );
630 else
631 ::unsetenv ( "LD_PRELOAD" );
616 } 632 }
617 StartingAppList::add( list[0] ); 633 StartingAppList::add( list[0] );
618#endif //QT_NO_QWS_MULTIPROCESS 634#endif //QT_NO_QWS_MULTIPROCESS
619} 635}
620 636
621 637
622/*! 638/*!
623 Executes the application identfied by \a c, passing \a 639 Executes the application identfied by \a c, passing \a
624 document if it isn't null. 640 document if it isn't null.
625 641
626 Note that a better approach might be to send a QCop message to the 642 Note that a better approach might be to send a QCop message to the
627 application's QPE/Application/\e{appname} channel. 643 application's QPE/Application/\e{appname} channel.
628*/ 644*/
629void Global::execute( const QString &c, const QString& document ) 645void Global::execute( const QString &c, const QString& document )
630{ 646{
631 if ( qApp->type() != QApplication::GuiServer ) { 647 if ( qApp->type() != QApplication::GuiServer ) {
632 // ask the server to do the work 648 // ask the server to do the work
633#if !defined(QT_NO_COP) 649#if !defined(QT_NO_COP)
634 if ( document.isNull() ) { 650 if ( document.isNull() ) {
635 QCopEnvelope e( "QPE/System", "execute(QString)" ); 651 QCopEnvelope e( "QPE/System", "execute(QString)" );
636 e << c; 652 e << c;
637 } else { 653 } else {
638 QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); 654 QCopEnvelope e( "QPE/System", "execute(QString,QString)" );
639 e << c << document; 655 e << c << document;
640 } 656 }
641#endif 657#endif
642 return; 658 return;
643 } 659 }
644 660
645 // Attempt to execute the app using a builtin class for the app first 661 // Attempt to execute the app using a builtin class for the app first
646 // else try and find it in the bin directory 662 // else try and find it in the bin directory
647 if (builtin) { 663 if (builtin) {
648 for (int i = 0; builtin[i].file; i++) { 664 for (int i = 0; builtin[i].file; i++) {
649 if ( builtin[i].file == c ) { 665 if ( builtin[i].file == c ) {
650 if ( running[i] ) { 666 if ( running[i] ) {
651 if ( !document.isNull() && builtin[i].documentary ) 667 if ( !document.isNull() && builtin[i].documentary )
652 setDocument(running[i], document); 668 setDocument(running[i], document);
653 running[i]->raise(); 669 running[i]->raise();
654 running[i]->show(); 670 running[i]->show();
655 running[i]->setActiveWindow(); 671 running[i]->setActiveWindow();
656 } else { 672 } else {
657 running[i] = builtin[i].func( builtin[i].maximized ); 673 running[i] = builtin[i].func( builtin[i].maximized );
658 } 674 }
659#ifndef QT_NO_COP 675#ifndef QT_NO_COP
660 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 676 QCopEnvelope e("QPE/System", "notBusy(QString)" );
661 e << c; // that was quick ;-) 677 e << c; // that was quick ;-)
662#endif 678#endif
663 return; 679 return;
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index efa65bc..a54fb20 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -853,140 +853,192 @@ QString QPEApplication::documentDir()
853 853
854static int deforient = -1; 854static int deforient = -1;
855 855
856/*! 856/*!
857 \internal 857 \internal
858*/ 858*/
859int QPEApplication::defaultRotation() 859int QPEApplication::defaultRotation()
860{ 860{
861 if ( deforient < 0 ) { 861 if ( deforient < 0 ) {
862 QString d = getenv( "QWS_DISPLAY" ); 862 QString d = getenv( "QWS_DISPLAY" );
863 if ( d.contains( "Rot90" ) ) { 863 if ( d.contains( "Rot90" ) ) {
864 deforient = 90; 864 deforient = 90;
865 } 865 }
866 else if ( d.contains( "Rot180" ) ) { 866 else if ( d.contains( "Rot180" ) ) {
867 deforient = 180; 867 deforient = 180;
868 } 868 }
869 else if ( d.contains( "Rot270" ) ) { 869 else if ( d.contains( "Rot270" ) ) {
870 deforient = 270; 870 deforient = 270;
871 } 871 }
872 else { 872 else {
873 deforient = 0; 873 deforient = 0;
874 } 874 }
875 } 875 }
876 return deforient; 876 return deforient;
877} 877}
878 878
879/*! 879/*!
880 \internal 880 \internal
881*/ 881*/
882void QPEApplication::setDefaultRotation( int r ) 882void QPEApplication::setDefaultRotation( int r )
883{ 883{
884 if ( qApp->type() == GuiServer ) { 884 if ( qApp->type() == GuiServer ) {
885 deforient = r; 885 deforient = r;
886 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 886 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
887 Config config("qpe"); 887 Config config("qpe");
888 config.setGroup( "Rotation" ); 888 config.setGroup( "Rotation" );
889 config.writeEntry( "Screen", getenv("QWS_DISPLAY") ); 889 config.writeEntry( "Screen", getenv("QWS_DISPLAY") );
890 } 890 }
891 else { 891 else {
892#ifndef QT_NO_COP 892#ifndef QT_NO_COP
893 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 893 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
894 e << r; 894 e << r;
895 } 895 }
896#endif 896#endif
897 897
898 } 898 }
899} 899}
900 900
901// exported to libpreload.so
902bool opie_block_style = false;
903
901/*! 904/*!
902 \internal 905 \internal
903*/ 906*/
904void QPEApplication::applyStyle() 907void QPEApplication::applyStyle()
905{ 908{
906 Config config( "qpe" ); 909 Config config( "qpe" );
907
908 config.setGroup( "Appearance" ); 910 config.setGroup( "Appearance" );
909 911
912 // don't block ourselves ...
913 opie_block_style = false;
914
915
916 static QString appname;
917
918 if ( appname. isNull ( )) {
919 char src [32];
920 char dst [PATH_MAX + 1];
921 ::sprintf ( src, "/proc/%d/exe", ::getpid ( ));
922 int l = ::readlink ( src, dst, PATH_MAX );
923 if ( l > 0 ) {
924 dst [l] = 0;
925 const char *b = ::strrchr ( dst, '/' );
926 appname = ( b ? b + 1 : dst );
927 }
928 else
929 appname = "";
930 }
931
932
933 QStringList ex = config. readListEntry ( "NoStyle", ';' );
934 int nostyle = 0;
935 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
936 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
937 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
938 break;
939 }
940 }
941
910 // Widget style 942 // Widget style
911 QString style = config.readEntry( "Style", "Light" ); 943 QString style = config.readEntry( "Style", "Light" );
912 internalSetStyle( style ); 944
945 // don't set a custom style
946 if ( nostyle & 0x01 )
947 style = "Light";
948
949 internalSetStyle ( style );
913 950
914 // Colors 951 // Colors
915 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); 952 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) );
916 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); 953 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) );
917 QPalette pal( btncolor, bgcolor ); 954 QPalette pal( btncolor, bgcolor );
918 QString color = config.readEntry( "Highlight", "#800000" ); 955 QString color = config.readEntry( "Highlight", "#800000" );
919 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 956 pal.setColor( QColorGroup::Highlight, QColor( color ) );
920 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 957 color = config.readEntry( "HighlightedText", "#FFFFFF" );
921 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 958 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
922 color = config.readEntry( "Text", "#000000" ); 959 color = config.readEntry( "Text", "#000000" );
923 pal.setColor( QColorGroup::Text, QColor( color ) ); 960 pal.setColor( QColorGroup::Text, QColor( color ) );
924 color = config.readEntry( "ButtonText", "#000000" ); 961 color = config.readEntry( "ButtonText", "#000000" );
925 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 962 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
926 color = config.readEntry( "Base", "#FFFFFF" ); 963 color = config.readEntry( "Base", "#FFFFFF" );
927 pal.setColor( QColorGroup::Base, QColor( color ) ); 964 pal.setColor( QColorGroup::Base, QColor( color ) );
928 965
929 pal.setColor( QPalette::Disabled, QColorGroup::Text, 966 pal.setColor( QPalette::Disabled, QColorGroup::Text,
930 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 967 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
931 968
932 setPalette( pal, TRUE ); 969 setPalette( pal, TRUE );
933 970
934 // Window Decoration 971 // Window Decoration
935 QString dec = config.readEntry( "Decoration", "Qtopia" ); 972 QString dec = config.readEntry( "Decoration", "Qtopia" );
973
974 // don't set a custom deco
975 if ( nostyle & 0x04 )
976 dec = "";
977
936 if ( dec != d->decorationName ) { 978 if ( dec != d->decorationName ) {
937 qwsSetDecoration( new QPEDecoration( dec ) ); 979 qwsSetDecoration( new QPEDecoration( dec ) );
938 d->decorationName = dec; 980 d->decorationName = dec;
939 } 981 }
940 982
941 // Font 983 // Font
942 QString ff = config.readEntry( "FontFamily", font().family() ); 984 QString ff = config.readEntry( "FontFamily", font().family() );
943 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 985 int fs = config.readNumEntry( "FontSize", font().pointSize() );
986
987 // don't set a custom font
988 if ( nostyle & 0x02 ) {
989 ff = "Helvetica";
990 fs = 10;
991 }
992
944 setFont( QFont(ff, fs) ); 993 setFont( QFont(ff, fs) );
994
995 // revert to global blocking policy ...
996 opie_block_style = config. readBoolEntry ( "ForceStyle", false );
945} 997}
946 998
947void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 999void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
948{ 1000{
949#ifdef Q_WS_QWS 1001#ifdef Q_WS_QWS
950 QDataStream stream( data, IO_ReadOnly ); 1002 QDataStream stream( data, IO_ReadOnly );
951 if ( msg == "applyStyle()" ) { 1003 if ( msg == "applyStyle()" ) {
952 applyStyle(); 1004 applyStyle();
953 } 1005 }
954 else if ( msg == "setDefaultRotation(int)" ) { 1006 else if ( msg == "setDefaultRotation(int)" ) {
955 if ( type() == GuiServer ) { 1007 if ( type() == GuiServer ) {
956 int r; 1008 int r;
957 stream >> r; 1009 stream >> r;
958 setDefaultRotation( r ); 1010 setDefaultRotation( r );
959 } 1011 }
960 } 1012 }
961 else if ( msg == "shutdown()" ) { 1013 else if ( msg == "shutdown()" ) {
962 if ( type() == GuiServer ) 1014 if ( type() == GuiServer )
963 shutdown(); 1015 shutdown();
964 } 1016 }
965 else if ( msg == "quit()" ) { 1017 else if ( msg == "quit()" ) {
966 if ( type() != GuiServer ) 1018 if ( type() != GuiServer )
967 tryQuit(); 1019 tryQuit();
968 } 1020 }
969 else if ( msg == "forceQuit()" ) { 1021 else if ( msg == "forceQuit()" ) {
970 if ( type() != GuiServer ) 1022 if ( type() != GuiServer )
971 quit(); 1023 quit();
972 } 1024 }
973 else if ( msg == "restart()" ) { 1025 else if ( msg == "restart()" ) {
974 if ( type() == GuiServer ) 1026 if ( type() == GuiServer )
975 restart(); 1027 restart();
976 } 1028 }
977 else if ( msg == "grabKeyboard(QString)" ) { 1029 else if ( msg == "grabKeyboard(QString)" ) {
978 QString who; 1030 QString who;
979 stream >> who; 1031 stream >> who;
980 if ( who.isEmpty() ) 1032 if ( who.isEmpty() )
981 d->kbgrabber = 0; 1033 d->kbgrabber = 0;
982 else if ( who != d->appName ) 1034 else if ( who != d->appName )
983 d->kbgrabber = 1; 1035 d->kbgrabber = 1;
984 else 1036 else
985 d->kbgrabber = 2; 1037 d->kbgrabber = 2;
986 } 1038 }
987 else if ( msg == "language(QString)" ) { 1039 else if ( msg == "language(QString)" ) {
988 if ( type() == GuiServer ) { 1040 if ( type() == GuiServer ) {
989 QString l; 1041 QString l;
990 stream >> l; 1042 stream >> l;
991 QString cl = getenv( "LANG" ); 1043 QString cl = getenv( "LANG" );
992 if ( cl != l ) { 1044 if ( cl != l ) {
@@ -1278,97 +1330,97 @@ void QPEApplication::internalSetStyle( const QString &style )
1278#endif 1330#endif
1279#ifndef QT_NO_STYLE_MOTIF 1331#ifndef QT_NO_STYLE_MOTIF
1280 else if ( style == "Motif" ) { 1332 else if ( style == "Motif" ) {
1281 setStyle( new QMotifStyle ); 1333 setStyle( new QMotifStyle );
1282 } 1334 }
1283#endif 1335#endif
1284#ifndef QT_NO_STYLE_MOTIFPLUS 1336#ifndef QT_NO_STYLE_MOTIFPLUS
1285 else if ( style == "MotifPlus" ) { 1337 else if ( style == "MotifPlus" ) {
1286 setStyle( new QMotifPlusStyle ); 1338 setStyle( new QMotifPlusStyle );
1287 } 1339 }
1288#endif 1340#endif
1289 1341
1290 else { 1342 else {
1291 QStyle *sty = 0; 1343 QStyle *sty = 0;
1292 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 1344 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/";
1293 1345
1294 if ( style. find ( ".so" ) > 0 ) 1346 if ( style. find ( ".so" ) > 0 )
1295 path += style; 1347 path += style;
1296 else 1348 else
1297 path = path + "lib" + style. lower ( ) + ".so"; // compatibility 1349 path = path + "lib" + style. lower ( ) + ".so"; // compatibility
1298 1350
1299 static QLibrary *lastlib = 0; 1351 static QLibrary *lastlib = 0;
1300 static StyleInterface *lastiface = 0; 1352 static StyleInterface *lastiface = 0;
1301 1353
1302 QLibrary *lib = new QLibrary ( path ); 1354 QLibrary *lib = new QLibrary ( path );
1303 StyleInterface *iface = 0; 1355 StyleInterface *iface = 0;
1304 1356
1305 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) 1357 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface )
1306 sty = iface-> style ( ); 1358 sty = iface-> style ( );
1307 1359
1308 if ( sty ) { 1360 if ( sty ) {
1309 setStyle ( sty ); 1361 setStyle ( sty );
1310 1362
1311 if ( lastiface ) 1363 if ( lastiface )
1312 lastiface-> release ( ); 1364 lastiface-> release ( );
1313 lastiface = iface; 1365 lastiface = iface;
1314 1366
1315 if ( lastlib ) { 1367 if ( lastlib ) {
1316 lastlib-> unload ( ); 1368 lastlib-> unload ( );
1317 delete lastlib; 1369 delete lastlib;
1318 } 1370 }
1319 lastlib = lib; 1371 lastlib = lib;
1320 } 1372 }
1321 else { 1373 else {
1322 if ( iface ) 1374 if ( iface )
1323 iface-> release ( ); 1375 iface-> release ( );
1324 delete lib; 1376 delete lib;
1325 1377
1326 setStyle ( new QPEStyle ( )); 1378 setStyle ( new LightStyle ( ));
1327 } 1379 }
1328 } 1380 }
1329#endif 1381#endif
1330} 1382}
1331 1383
1332/*! 1384/*!
1333 \internal 1385 \internal
1334*/ 1386*/
1335void QPEApplication::prepareForTermination( bool willrestart ) 1387void QPEApplication::prepareForTermination( bool willrestart )
1336{ 1388{
1337 if ( willrestart ) { 1389 if ( willrestart ) {
1338 // Draw a big wait icon, the image can be altered in later revisions 1390 // Draw a big wait icon, the image can be altered in later revisions
1339 // QWidget *d = QApplication::desktop(); 1391 // QWidget *d = QApplication::desktop();
1340 QImage img = Resource::loadImage( "launcher/new_wait" ); 1392 QImage img = Resource::loadImage( "launcher/new_wait" );
1341 QPixmap pix; 1393 QPixmap pix;
1342 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); 1394 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) );
1343 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | 1395 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize |
1344 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 1396 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
1345 lblWait->setPixmap( pix ); 1397 lblWait->setPixmap( pix );
1346 lblWait->setAlignment( QWidget::AlignCenter ); 1398 lblWait->setAlignment( QWidget::AlignCenter );
1347 lblWait->show(); 1399 lblWait->show();
1348 lblWait->showMaximized(); 1400 lblWait->showMaximized();
1349 } 1401 }
1350#ifndef SINGLE_APP 1402#ifndef SINGLE_APP
1351 { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); 1403 { QCopEnvelope envelope( "QPE/System", "forceQuit()" );
1352 } 1404 }
1353 processEvents(); // ensure the message goes out. 1405 processEvents(); // ensure the message goes out.
1354 sleep( 1 ); // You have 1 second to comply. 1406 sleep( 1 ); // You have 1 second to comply.
1355#endif 1407#endif
1356} 1408}
1357 1409
1358/*! 1410/*!
1359 \internal 1411 \internal
1360*/ 1412*/
1361void QPEApplication::shutdown() 1413void QPEApplication::shutdown()
1362{ 1414{
1363 // Implement in server's QPEApplication subclass 1415 // Implement in server's QPEApplication subclass
1364} 1416}
1365 1417
1366/*! 1418/*!
1367 \internal 1419 \internal
1368*/ 1420*/
1369void QPEApplication::restart() 1421void QPEApplication::restart()
1370{ 1422{
1371 // Implement in server's QPEApplication subclass 1423 // Implement in server's QPEApplication subclass
1372} 1424}
1373 1425
1374static QPtrDict<void>* stylusDict = 0; 1426static QPtrDict<void>* stylusDict = 0;