summaryrefslogtreecommitdiff
authorsandman <sandman>2002-11-24 18:21:41 (UTC)
committer sandman <sandman>2002-11-24 18:21:41 (UTC)
commit89bf0723eefc1e66a104fe8135f1a5389f021442 (patch) (unidiff)
treea7db1ba8fa34d8226fe9baa9e7c488c86ad95445
parentee62e73ddc29a5015c4a3e569be90dbfce4652c6 (diff)
downloadopie-89bf0723eefc1e66a104fe8135f1a5389f021442.zip
opie-89bf0723eefc1e66a104fe8135f1a5389f021442.tar.gz
opie-89bf0723eefc1e66a104fe8135f1a5389f021442.tar.bz2
- LD_PRELOADing of libpreload.so in case the user selected [x] Force style
settings in appearance - Some code to NOT style some applications, based on the binary name (also selectable in appearance)
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
@@ -583,57 +583,73 @@ void Global::invoke(const QString &c)
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;
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index efa65bc..a54fb20 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -877,92 +877,144 @@ int QPEApplication::defaultRotation()
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 }
@@ -1302,49 +1354,49 @@ void QPEApplication::internalSetStyle( const QString &style )
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