author | sandman <sandman> | 2002-11-24 18:21:41 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-11-24 18:21:41 (UTC) |
commit | 89bf0723eefc1e66a104fe8135f1a5389f021442 (patch) (unidiff) | |
tree | a7db1ba8fa34d8226fe9baa9e7c488c86ad95445 | |
parent | ee62e73ddc29a5015c4a3e569be90dbfce4652c6 (diff) | |
download | opie-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)
-rw-r--r-- | library/global.cpp | 16 | ||||
-rw-r--r-- | library/qpeapplication.cpp | 60 |
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 | |||
@@ -595,33 +595,49 @@ void Global::invoke(const QString &c) | |||
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. |
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp index efa65bc..a54fb20 100644 --- a/library/qpeapplication.cpp +++ b/library/qpeapplication.cpp | |||
@@ -889,68 +889,120 @@ void QPEApplication::setDefaultRotation( int r ) | |||
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 | ||
902 | bool opie_block_style = false; | ||
903 | |||
901 | /*! | 904 | /*! |
902 | \internal | 905 | \internal |
903 | */ | 906 | */ |
904 | void QPEApplication::applyStyle() | 907 | void 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 | ||
947 | void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) | 999 | void 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; |
@@ -1314,25 +1366,25 @@ void QPEApplication::internalSetStyle( const QString &style ) | |||
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 | */ |
1335 | void QPEApplication::prepareForTermination( bool willrestart ) | 1387 | void 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 |