summaryrefslogtreecommitdiff
path: root/library
Unidiff
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp46
-rw-r--r--library/qpeapplication.h2
2 files changed, 48 insertions, 0 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 149e6bb..71ec5b3 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -814,625 +814,671 @@ public:
814 814
815void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 815void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
816{ 816{
817 // specialised actions for certain widgets. May want to 817 // specialised actions for certain widgets. May want to
818 // add more stuff here. 818 // add more stuff here.
819 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 819 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
820 && activePopupWidget() ->parentWidget() 820 && activePopupWidget() ->parentWidget()
821 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 821 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
822 key = Qt::Key_Return; 822 key = Qt::Key_Return;
823 823
824 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 824 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
825 key = Qt::Key_Return; 825 key = Qt::Key_Return;
826 826
827#ifdef QWS 827#ifdef QWS
828 828
829 ke->simpleData.keycode = key; 829 ke->simpleData.keycode = key;
830#endif 830#endif
831} 831}
832 832
833class HackWidget : public QWidget 833class HackWidget : public QWidget
834{ 834{
835public: 835public:
836 bool needsOk() 836 bool needsOk()
837 { 837 {
838 return ( getWState() & WState_Reserved1 ); 838 return ( getWState() & WState_Reserved1 );
839 } 839 }
840}; 840};
841 841
842/*! 842/*!
843 \internal 843 \internal
844*/ 844*/
845 845
846#ifdef QWS 846#ifdef QWS
847bool QPEApplication::qwsEventFilter( QWSEvent * e ) 847bool QPEApplication::qwsEventFilter( QWSEvent * e )
848{ 848{
849 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 849 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
850 if ( qApp->type() != QApplication::GuiServer ) { 850 if ( qApp->type() != QApplication::GuiServer ) {
851 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 851 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
852 e << d->appName; 852 e << d->appName;
853 } 853 }
854 d->notbusysent = TRUE; 854 d->notbusysent = TRUE;
855 } 855 }
856 if ( type() == GuiServer ) { 856 if ( type() == GuiServer ) {
857 switch ( e->type ) { 857 switch ( e->type ) {
858 case QWSEvent::Mouse: 858 case QWSEvent::Mouse:
859 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 859 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
860 emit clientMoused(); 860 emit clientMoused();
861 break; 861 break;
862 default: 862 default:
863 break; 863 break;
864 } 864 }
865 } 865 }
866 if ( e->type == QWSEvent::Key ) { 866 if ( e->type == QWSEvent::Key ) {
867 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 867 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
868 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 868 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
869 // Use special "OK" key to press "OK" on top level widgets 869 // Use special "OK" key to press "OK" on top level widgets
870 QWidget * active = activeWindow(); 870 QWidget * active = activeWindow();
871 QWidget *popup = 0; 871 QWidget *popup = 0;
872 if ( active && active->isPopup() ) { 872 if ( active && active->isPopup() ) {
873 popup = active; 873 popup = active;
874 active = active->parentWidget(); 874 active = active->parentWidget();
875 } 875 }
876 if ( active && ( int ) active->winId() == ke->simpleData.window && 876 if ( active && ( int ) active->winId() == ke->simpleData.window &&
877 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 877 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
878 if ( ke->simpleData.is_press ) { 878 if ( ke->simpleData.is_press ) {
879 if ( popup ) 879 if ( popup )
880 popup->close(); 880 popup->close();
881 if ( active->inherits( "QDialog" ) ) { 881 if ( active->inherits( "QDialog" ) ) {
882 HackDialog * d = ( HackDialog * ) active; 882 HackDialog * d = ( HackDialog * ) active;
883 d->acceptIt(); 883 d->acceptIt();
884 return TRUE; 884 return TRUE;
885 } 885 }
886 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 886 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
887 QSignal s; 887 QSignal s;
888 s.connect( active, SLOT( accept() ) ); 888 s.connect( active, SLOT( accept() ) );
889 s.activate(); 889 s.activate();
890 } 890 }
891 else { 891 else {
892 // do the same as with the select key: Map to the default action of the widget: 892 // do the same as with the select key: Map to the default action of the widget:
893 mapToDefaultAction( ke, Qt::Key_Return ); 893 mapToDefaultAction( ke, Qt::Key_Return );
894 } 894 }
895 } 895 }
896 } 896 }
897 } 897 }
898 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 898 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
899 // Use special "select" key to do whatever default action a widget has 899 // Use special "select" key to do whatever default action a widget has
900 mapToDefaultAction( ke, Qt::Key_Space ); 900 mapToDefaultAction( ke, Qt::Key_Space );
901 } 901 }
902 else if ( ke->simpleData.keycode == Qt::Key_Escape && 902 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
903 ke->simpleData.is_press ) { 903 ke->simpleData.is_press ) {
904 // Escape key closes app if focus on toplevel 904 // Escape key closes app if focus on toplevel
905 QWidget * active = activeWindow(); 905 QWidget * active = activeWindow();
906 if ( active && active->testWFlags( WType_TopLevel ) && 906 if ( active && active->testWFlags( WType_TopLevel ) &&
907 ( int ) active->winId() == ke->simpleData.window && 907 ( int ) active->winId() == ke->simpleData.window &&
908 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 908 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
909 if ( active->inherits( "QDialog" ) ) { 909 if ( active->inherits( "QDialog" ) ) {
910 HackDialog * d = ( HackDialog * ) active; 910 HackDialog * d = ( HackDialog * ) active;
911 d->rejectIt(); 911 d->rejectIt();
912 return TRUE; 912 return TRUE;
913 } 913 }
914 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 914 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
915 active->close(); 915 active->close();
916 } 916 }
917 } 917 }
918 } 918 }
919 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { 919 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) {
920 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) 920 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... ))
921 // but we cannot access libopie function within libqpe :( 921 // but we cannot access libopie function within libqpe :(
922 922
923 QWidget * active = activeWindow ( ); 923 QWidget * active = activeWindow ( );
924 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { 924 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) {
925 if ( d-> kbgrabbed ) { // we grabbed the keyboard 925 if ( d-> kbgrabbed ) { // we grabbed the keyboard
926 QChar ch ( ke-> simpleData.unicode ); 926 QChar ch ( ke-> simpleData.unicode );
927 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, 927 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease,
928 ke-> simpleData.keycode, 928 ke-> simpleData.keycode,
929 ch. latin1 ( ), 929 ch. latin1 ( ),
930 ke-> simpleData.modifiers, 930 ke-> simpleData.modifiers,
931 QString ( ch ), 931 QString ( ch ),
932 ke-> simpleData.is_auto_repeat, 1 ); 932 ke-> simpleData.is_auto_repeat, 1 );
933 933
934 QObject *which = QWidget::keyboardGrabber ( ); 934 QObject *which = QWidget::keyboardGrabber ( );
935 if ( !which ) 935 if ( !which )
936 which = QApplication::focusWidget ( ); 936 which = QApplication::focusWidget ( );
937 if ( !which ) 937 if ( !which )
938 which = QApplication::activeWindow ( ); 938 which = QApplication::activeWindow ( );
939 if ( !which ) 939 if ( !which )
940 which = qApp; 940 which = qApp;
941 941
942 QApplication::sendEvent ( which, &qke ); 942 QApplication::sendEvent ( which, &qke );
943 } 943 }
944 else { // we didn't grab the keyboard, so send the event to the launcher 944 else { // we didn't grab the keyboard, so send the event to the launcher
945 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); 945 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" );
946 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat ); 946 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat );
947 } 947 }
948 } 948 }
949 return true; 949 return true;
950 } 950 }
951 } 951 }
952 if ( e->type == QWSEvent::Focus ) { 952 if ( e->type == QWSEvent::Focus ) {
953 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 953 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
954 if ( !fe->simpleData.get_focus ) { 954 if ( !fe->simpleData.get_focus ) {
955 QWidget * active = activeWindow(); 955 QWidget * active = activeWindow();
956 while ( active && active->isPopup() ) { 956 while ( active && active->isPopup() ) {
957 active->close(); 957 active->close();
958 active = activeWindow(); 958 active = activeWindow();
959 } 959 }
960 } 960 }
961 else { 961 else {
962 // make sure our modal widget is ALWAYS on top 962 // make sure our modal widget is ALWAYS on top
963 QWidget *topm = activeModalWidget(); 963 QWidget *topm = activeModalWidget();
964 if ( topm ) { 964 if ( topm ) {
965 topm->raise(); 965 topm->raise();
966 } 966 }
967 } 967 }
968 if ( fe->simpleData.get_focus && inputMethodDict ) { 968 if ( fe->simpleData.get_focus && inputMethodDict ) {
969 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 969 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
970 if ( m == AlwaysOff ) 970 if ( m == AlwaysOff )
971 Global::hideInputMethod(); 971 Global::hideInputMethod();
972 if ( m == AlwaysOn ) 972 if ( m == AlwaysOn )
973 Global::showInputMethod(); 973 Global::showInputMethod();
974 } 974 }
975 } 975 }
976 976
977 977
978 return QApplication::qwsEventFilter( e ); 978 return QApplication::qwsEventFilter( e );
979} 979}
980#endif 980#endif
981 981
982/*! 982/*!
983 Destroys the QPEApplication. 983 Destroys the QPEApplication.
984*/ 984*/
985QPEApplication::~QPEApplication() 985QPEApplication::~QPEApplication()
986{ 986{
987 ungrabKeyboard(); 987 ungrabKeyboard();
988#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 988#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
989 // Need to delete QCopChannels early, since the display will 989 // Need to delete QCopChannels early, since the display will
990 // be gone by the time we get to ~QObject(). 990 // be gone by the time we get to ~QObject().
991 delete sysChannel; 991 delete sysChannel;
992 delete pidChannel; 992 delete pidChannel;
993#endif 993#endif
994 994
995 delete d; 995 delete d;
996} 996}
997 997
998/*! 998/*!
999 Returns <tt>$OPIEDIR/</tt>. 999 Returns <tt>$OPIEDIR/</tt>.
1000*/ 1000*/
1001QString QPEApplication::qpeDir() 1001QString QPEApplication::qpeDir()
1002{ 1002{
1003 const char * base = getenv( "OPIEDIR" ); 1003 const char * base = getenv( "OPIEDIR" );
1004 if ( base ) 1004 if ( base )
1005 return QString( base ) + "/"; 1005 return QString( base ) + "/";
1006 1006
1007 return QString( "../" ); 1007 return QString( "../" );
1008} 1008}
1009 1009
1010/*! 1010/*!
1011 Returns the user's current Document directory. There is a trailing "/". 1011 Returns the user's current Document directory. There is a trailing "/".
1012 .. well, it does now,, and there's no trailing '/' 1012 .. well, it does now,, and there's no trailing '/'
1013*/ 1013*/
1014QString QPEApplication::documentDir() 1014QString QPEApplication::documentDir()
1015{ 1015{
1016 const char* base = getenv( "HOME"); 1016 const char* base = getenv( "HOME");
1017 if ( base ) 1017 if ( base )
1018 return QString( base ) + "/Documents"; 1018 return QString( base ) + "/Documents";
1019 1019
1020 return QString( "../Documents" ); 1020 return QString( "../Documents" );
1021} 1021}
1022 1022
1023static int deforient = -1; 1023static int deforient = -1;
1024 1024
1025/*! 1025/*!
1026 \internal 1026 \internal
1027*/ 1027*/
1028int QPEApplication::defaultRotation() 1028int QPEApplication::defaultRotation()
1029{ 1029{
1030 if ( deforient < 0 ) { 1030 if ( deforient < 0 ) {
1031 QString d = getenv( "QWS_DISPLAY" ); 1031 QString d = getenv( "QWS_DISPLAY" );
1032 if ( d.contains( "Rot90" ) ) { 1032 if ( d.contains( "Rot90" ) ) {
1033 deforient = 90; 1033 deforient = 90;
1034 } 1034 }
1035 else if ( d.contains( "Rot180" ) ) { 1035 else if ( d.contains( "Rot180" ) ) {
1036 deforient = 180; 1036 deforient = 180;
1037 } 1037 }
1038 else if ( d.contains( "Rot270" ) ) { 1038 else if ( d.contains( "Rot270" ) ) {
1039 deforient = 270; 1039 deforient = 270;
1040 } 1040 }
1041 else { 1041 else {
1042 deforient = 0; 1042 deforient = 0;
1043 } 1043 }
1044 } 1044 }
1045 return deforient; 1045 return deforient;
1046} 1046}
1047 1047
1048/*! 1048/*!
1049 \internal 1049 \internal
1050*/ 1050*/
1051void QPEApplication::setDefaultRotation( int r ) 1051void QPEApplication::setDefaultRotation( int r )
1052{ 1052{
1053 if ( qApp->type() == GuiServer ) { 1053 if ( qApp->type() == GuiServer ) {
1054 deforient = r; 1054 deforient = r;
1055 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 1055 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
1056 Config config("qpe"); 1056 Config config("qpe");
1057 config.setGroup( "Rotation" ); 1057 config.setGroup( "Rotation" );
1058 config.writeEntry( "Rot", r ); 1058 config.writeEntry( "Rot", r );
1059 } 1059 }
1060 else { 1060 else {
1061#ifndef QT_NO_COP 1061#ifndef QT_NO_COP
1062 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 1062 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
1063 e << r; 1063 e << r;
1064 } 1064 }
1065#endif 1065#endif
1066 1066
1067 } 1067 }
1068} 1068}
1069 1069
1070#include <qgfx_qws.h>
1071#include <qwindowsystem_qws.h>
1072#include <qpixmapcache.h>
1073
1074extern void qws_clearLoadedFonts();
1075
1076inline void QPEApplication::setCurrentMode( int x, int y, int depth )
1077{
1078 // Reset the caches
1079 qws_clearLoadedFonts();
1080 QPixmapCache::clear();
1081
1082 // Change the screen mode
1083 qt_screen->setMode(x, y, depth);
1084
1085 if ( qApp->type() == GuiServer ) {
1086 // Reconfigure the GuiServer
1087 qwsServer->beginDisplayReconfigure();
1088 qwsServer->endDisplayReconfigure();
1089
1090 // Get all the running apps to reset
1091 QCopEnvelope env( "QPE/System", "reset()" );
1092 }
1093}
1094
1095inline void QPEApplication::reset() {
1096 // Reconnect to the screen
1097 qt_screen->disconnect();
1098 qt_screen->connect( QString::null );
1099
1100 // Redraw everything
1101 applyStyle();
1102}
1070 1103
1071/*! 1104/*!
1072 \internal 1105 \internal
1073*/ 1106*/
1074void QPEApplication::applyStyle() 1107void QPEApplication::applyStyle()
1075{ 1108{
1076 Config config( "qpe" ); 1109 Config config( "qpe" );
1077 config.setGroup( "Appearance" ); 1110 config.setGroup( "Appearance" );
1078 1111
1079 #if QT_VERSION > 233 1112 #if QT_VERSION > 233
1080 // don't block ourselves ... 1113 // don't block ourselves ...
1081 Opie::force_appearance = 0; 1114 Opie::force_appearance = 0;
1082 1115
1083 static QString appname = Opie::binaryName ( ); 1116 static QString appname = Opie::binaryName ( );
1084 1117
1085 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 1118 QStringList ex = config. readListEntry ( "NoStyle", ';' );
1086 int nostyle = 0; 1119 int nostyle = 0;
1087 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 1120 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
1088 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 1121 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
1089 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 1122 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
1090 break; 1123 break;
1091 } 1124 }
1092 } 1125 }
1093 1126
1094 // Widget style 1127 // Widget style
1095 QString style = config.readEntry( "Style", "FlatStyle" ); 1128 QString style = config.readEntry( "Style", "FlatStyle" );
1096 1129
1097 // don't set a custom style 1130 // don't set a custom style
1098 if ( nostyle & Opie::Force_Style ) 1131 if ( nostyle & Opie::Force_Style )
1099 style = "FlatStyle"; 1132 style = "FlatStyle";
1100 1133
1101 internalSetStyle ( style ); 1134 internalSetStyle ( style );
1102 1135
1103 // Colors - from /etc/colors/Liquid.scheme 1136 // Colors - from /etc/colors/Liquid.scheme
1104 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) ); 1137 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) );
1105 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) ); 1138 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) );
1106 QPalette pal( btncolor, bgcolor ); 1139 QPalette pal( btncolor, bgcolor );
1107 QString color = config.readEntry( "Highlight", "#73adef" ); 1140 QString color = config.readEntry( "Highlight", "#73adef" );
1108 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 1141 pal.setColor( QColorGroup::Highlight, QColor( color ) );
1109 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 1142 color = config.readEntry( "HighlightedText", "#FFFFFF" );
1110 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 1143 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
1111 color = config.readEntry( "Text", "#000000" ); 1144 color = config.readEntry( "Text", "#000000" );
1112 pal.setColor( QColorGroup::Text, QColor( color ) ); 1145 pal.setColor( QColorGroup::Text, QColor( color ) );
1113 color = config.readEntry( "ButtonText", "#000000" ); 1146 color = config.readEntry( "ButtonText", "#000000" );
1114 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 1147 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
1115 color = config.readEntry( "Base", "#FFFFFF" ); 1148 color = config.readEntry( "Base", "#FFFFFF" );
1116 pal.setColor( QColorGroup::Base, QColor( color ) ); 1149 pal.setColor( QColorGroup::Base, QColor( color ) );
1117 1150
1118 pal.setColor( QPalette::Disabled, QColorGroup::Text, 1151 pal.setColor( QPalette::Disabled, QColorGroup::Text,
1119 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 1152 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
1120 1153
1121 setPalette( pal, TRUE ); 1154 setPalette( pal, TRUE );
1122 1155
1123 // Window Decoration 1156 // Window Decoration
1124 QString dec = config.readEntry( "Decoration", "Flat" ); 1157 QString dec = config.readEntry( "Decoration", "Flat" );
1125 1158
1126 // don't set a custom deco 1159 // don't set a custom deco
1127 if ( nostyle & Opie::Force_Decoration ) 1160 if ( nostyle & Opie::Force_Decoration )
1128 dec = ""; 1161 dec = "";
1129 1162
1130 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle); 1163 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
1131 1164
1132 if ( dec != d->decorationName ) { 1165 if ( dec != d->decorationName ) {
1133 qwsSetDecoration( new QPEDecoration( dec ) ); 1166 qwsSetDecoration( new QPEDecoration( dec ) );
1134 d->decorationName = dec; 1167 d->decorationName = dec;
1135 } 1168 }
1136 1169
1137 // Font 1170 // Font
1138 QString ff = config.readEntry( "FontFamily", font().family() ); 1171 QString ff = config.readEntry( "FontFamily", font().family() );
1139 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 1172 int fs = config.readNumEntry( "FontSize", font().pointSize() );
1140 1173
1141 // don't set a custom font 1174 // don't set a custom font
1142 if ( nostyle & Opie::Force_Font ) { 1175 if ( nostyle & Opie::Force_Font ) {
1143 ff = "Vera"; 1176 ff = "Vera";
1144 fs = 10; 1177 fs = 10;
1145 } 1178 }
1146 1179
1147 setFont ( QFont ( ff, fs ), true ); 1180 setFont ( QFont ( ff, fs ), true );
1148 1181
1149 // revert to global blocking policy ... 1182 // revert to global blocking policy ...
1150 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None; 1183 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None;
1151 Opie::force_appearance &= ~nostyle; 1184 Opie::force_appearance &= ~nostyle;
1152 #endif 1185 #endif
1153} 1186}
1154 1187
1155void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1188void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1156{ 1189{
1157#ifdef Q_WS_QWS 1190#ifdef Q_WS_QWS
1158 QDataStream stream( data, IO_ReadOnly ); 1191 QDataStream stream( data, IO_ReadOnly );
1159 if ( msg == "applyStyle()" ) { 1192 if ( msg == "applyStyle()" ) {
1160 applyStyle(); 1193 applyStyle();
1161 } 1194 }
1162 else if ( msg == "toggleApplicationMenu()" ) { 1195 else if ( msg == "toggleApplicationMenu()" ) {
1163 QWidget *active = activeWindow ( ); 1196 QWidget *active = activeWindow ( );
1164 1197
1165 if ( active ) { 1198 if ( active ) {
1166 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( ); 1199 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( );
1167 bool oldactive = man-> isActive ( ); 1200 bool oldactive = man-> isActive ( );
1168 1201
1169 man-> setActive( !man-> isActive() ); 1202 man-> setActive( !man-> isActive() );
1170 1203
1171 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu 1204 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu
1172 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" ); 1205 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" );
1173 } 1206 }
1174 } 1207 }
1175 } 1208 }
1176 else if ( msg == "setDefaultRotation(int)" ) { 1209 else if ( msg == "setDefaultRotation(int)" ) {
1177 if ( type() == GuiServer ) { 1210 if ( type() == GuiServer ) {
1178 int r; 1211 int r;
1179 stream >> r; 1212 stream >> r;
1180 setDefaultRotation( r ); 1213 setDefaultRotation( r );
1181 } 1214 }
1182 } 1215 }
1216 else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net>
1217 if ( type() == GuiServer ) {
1218 int x, y, depth;
1219 stream >> x;
1220 stream >> y;
1221 stream >> depth;
1222 setCurrentMode( x, y, depth );
1223 }
1224 }
1225 else if ( msg == "reset()" ) {
1226 if ( type() != GuiServer )
1227 reset();
1228 }
1183 else if ( msg == "setCurrentRotation(int)" ) { 1229 else if ( msg == "setCurrentRotation(int)" ) {
1184 int r; 1230 int r;
1185 stream >> r; 1231 stream >> r;
1186 setCurrentRotation( r ); 1232 setCurrentRotation( r );
1187 } 1233 }
1188 else if ( msg == "shutdown()" ) { 1234 else if ( msg == "shutdown()" ) {
1189 if ( type() == GuiServer ) 1235 if ( type() == GuiServer )
1190 shutdown(); 1236 shutdown();
1191 } 1237 }
1192 else if ( msg == "quit()" ) { 1238 else if ( msg == "quit()" ) {
1193 if ( type() != GuiServer ) 1239 if ( type() != GuiServer )
1194 tryQuit(); 1240 tryQuit();
1195 } 1241 }
1196 else if ( msg == "forceQuit()" ) { 1242 else if ( msg == "forceQuit()" ) {
1197 if ( type() != GuiServer ) 1243 if ( type() != GuiServer )
1198 quit(); 1244 quit();
1199 } 1245 }
1200 else if ( msg == "restart()" ) { 1246 else if ( msg == "restart()" ) {
1201 if ( type() == GuiServer ) 1247 if ( type() == GuiServer )
1202 restart(); 1248 restart();
1203 } 1249 }
1204 else if ( msg == "language(QString)" ) { 1250 else if ( msg == "language(QString)" ) {
1205 if ( type() == GuiServer ) { 1251 if ( type() == GuiServer ) {
1206 QString l; 1252 QString l;
1207 stream >> l; 1253 stream >> l;
1208 QString cl = getenv( "LANG" ); 1254 QString cl = getenv( "LANG" );
1209 if ( cl != l ) { 1255 if ( cl != l ) {
1210 if ( l.isNull() ) 1256 if ( l.isNull() )
1211 unsetenv( "LANG" ); 1257 unsetenv( "LANG" );
1212 else 1258 else
1213 setenv( "LANG", l.latin1(), 1 ); 1259 setenv( "LANG", l.latin1(), 1 );
1214 restart(); 1260 restart();
1215 } 1261 }
1216 } 1262 }
1217 } 1263 }
1218 else if ( msg == "timeChange(QString)" ) { 1264 else if ( msg == "timeChange(QString)" ) {
1219 QString t; 1265 QString t;
1220 stream >> t; 1266 stream >> t;
1221 if ( t.isNull() ) 1267 if ( t.isNull() )
1222 unsetenv( "TZ" ); 1268 unsetenv( "TZ" );
1223 else 1269 else
1224 setenv( "TZ", t.latin1(), 1 ); 1270 setenv( "TZ", t.latin1(), 1 );
1225 // emit the signal so everyone else knows... 1271 // emit the signal so everyone else knows...
1226 emit timeChanged(); 1272 emit timeChanged();
1227 } 1273 }
1228 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1274 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1229 if ( type() == GuiServer ) { 1275 if ( type() == GuiServer ) {
1230 QDateTime when; 1276 QDateTime when;
1231 QCString channel, message; 1277 QCString channel, message;
1232 int data; 1278 int data;
1233 stream >> when >> channel >> message >> data; 1279 stream >> when >> channel >> message >> data;
1234 AlarmServer::addAlarm( when, channel, message, data ); 1280 AlarmServer::addAlarm( when, channel, message, data );
1235 } 1281 }
1236 } 1282 }
1237 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1283 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1238 if ( type() == GuiServer ) { 1284 if ( type() == GuiServer ) {
1239 QDateTime when; 1285 QDateTime when;
1240 QCString channel, message; 1286 QCString channel, message;
1241 int data; 1287 int data;
1242 stream >> when >> channel >> message >> data; 1288 stream >> when >> channel >> message >> data;
1243 AlarmServer::deleteAlarm( when, channel, message, data ); 1289 AlarmServer::deleteAlarm( when, channel, message, data );
1244 } 1290 }
1245 } 1291 }
1246 else if ( msg == "clockChange(bool)" ) { 1292 else if ( msg == "clockChange(bool)" ) {
1247 int tmp; 1293 int tmp;
1248 stream >> tmp; 1294 stream >> tmp;
1249 emit clockChanged( tmp ); 1295 emit clockChanged( tmp );
1250 } 1296 }
1251 else if ( msg == "weekChange(bool)" ) { 1297 else if ( msg == "weekChange(bool)" ) {
1252 int tmp; 1298 int tmp;
1253 stream >> tmp; 1299 stream >> tmp;
1254 emit weekChanged( tmp ); 1300 emit weekChanged( tmp );
1255 } 1301 }
1256 else if ( msg == "setDateFormat(DateFormat)" ) { 1302 else if ( msg == "setDateFormat(DateFormat)" ) {
1257 DateFormat tmp; 1303 DateFormat tmp;
1258 stream >> tmp; 1304 stream >> tmp;
1259 emit dateFormatChanged( tmp ); 1305 emit dateFormatChanged( tmp );
1260 } 1306 }
1261 else if ( msg == "setVolume(int,int)" ) { 1307 else if ( msg == "setVolume(int,int)" ) {
1262 int t, v; 1308 int t, v;
1263 stream >> t >> v; 1309 stream >> t >> v;
1264 setVolume( t, v ); 1310 setVolume( t, v );
1265 emit volumeChanged( muted ); 1311 emit volumeChanged( muted );
1266 } 1312 }
1267 else if ( msg == "volumeChange(bool)" ) { 1313 else if ( msg == "volumeChange(bool)" ) {
1268 stream >> muted; 1314 stream >> muted;
1269 setVolume(); 1315 setVolume();
1270 emit volumeChanged( muted ); 1316 emit volumeChanged( muted );
1271 } 1317 }
1272 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1318 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1273 int t, v; 1319 int t, v;
1274 stream >> t >> v; 1320 stream >> t >> v;
1275 setMic( t, v ); 1321 setMic( t, v );
1276 emit micChanged( micMuted ); 1322 emit micChanged( micMuted );
1277 } 1323 }
1278 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1324 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1279 stream >> micMuted; 1325 stream >> micMuted;
1280 setMic(); 1326 setMic();
1281 emit micChanged( micMuted ); 1327 emit micChanged( micMuted );
1282 } 1328 }
1283 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1329 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1284 int t, v; 1330 int t, v;
1285 stream >> t >> v; 1331 stream >> t >> v;
1286 setBass( t, v ); 1332 setBass( t, v );
1287 } 1333 }
1288 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1334 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1289 setBass(); 1335 setBass();
1290 } 1336 }
1291 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1337 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1292 int t, v; 1338 int t, v;
1293 stream >> t >> v; 1339 stream >> t >> v;
1294 setTreble( t, v ); 1340 setTreble( t, v );
1295 } 1341 }
1296 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1342 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1297 setTreble(); 1343 setTreble();
1298 } else if ( msg == "getMarkedText()" ) { 1344 } else if ( msg == "getMarkedText()" ) {
1299 if ( type() == GuiServer ) { 1345 if ( type() == GuiServer ) {
1300 const ushort unicode = 'C'-'@'; 1346 const ushort unicode = 'C'-'@';
1301 const int scan = Key_C; 1347 const int scan = Key_C;
1302 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); 1348 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
1303 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); 1349 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
1304 } 1350 }
1305 } else if ( msg == "newChannel(QString)") { 1351 } else if ( msg == "newChannel(QString)") {
1306 QString myChannel = "QPE/Application/" + d->appName; 1352 QString myChannel = "QPE/Application/" + d->appName;
1307 QString channel; 1353 QString channel;
1308 stream >> channel; 1354 stream >> channel;
1309 if (channel == myChannel) { 1355 if (channel == myChannel) {
1310 processQCopFile(); 1356 processQCopFile();
1311 d->sendQCopQ(); 1357 d->sendQCopQ();
1312 } 1358 }
1313 } 1359 }
1314 1360
1315 1361
1316#endif 1362#endif
1317} 1363}
1318 1364
1319#include <qmetaobject.h> 1365#include <qmetaobject.h>
1320 1366
1321QWidget *QPEApplication::nextWidget(QWidgetList* list, QWidget* _wid) { 1367QWidget *QPEApplication::nextWidget(QWidgetList* list, QWidget* _wid) {
1322 QWidget *next = 0; 1368 QWidget *next = 0;
1323 if ( list->isEmpty() || list->count() == 1 ) 1369 if ( list->isEmpty() || list->count() == 1 )
1324 next = _wid; 1370 next = _wid;
1325 else{ 1371 else{
1326 QWidget* wid; 1372 QWidget* wid;
1327 uint idx = list->findRef( _wid ); 1373 uint idx = list->findRef( _wid );
1328 uint count = list->count(); 1374 uint count = list->count();
1329 1375
1330 /* one time through the list hacky we may not start with idx but end with it*/ 1376 /* one time through the list hacky we may not start with idx but end with it*/
1331 for (uint i = (idx + 1)%count; true; i=(i+1)%count ) { 1377 for (uint i = (idx + 1)%count; true; i=(i+1)%count ) {
1332 wid = list->at(i); 1378 wid = list->at(i);
1333 if ( wid == _wid ) { 1379 if ( wid == _wid ) {
1334 next = _wid; 1380 next = _wid;
1335 break; 1381 break;
1336 }else if ((( wid->inherits("QMainWindow") || 1382 }else if ((( wid->inherits("QMainWindow") ||
1337 wid->inherits("QDialog") ) && 1383 wid->inherits("QDialog") ) &&
1338 wid != qApp->desktop() && !wid->isHidden() ) || 1384 wid != qApp->desktop() && !wid->isHidden() ) ||
1339 ( wid == mainWidget() || wid == d->qpe_main_widget ) ){ 1385 ( wid == mainWidget() || wid == d->qpe_main_widget ) ){
1340 next = wid; 1386 next = wid;
1341 break; 1387 break;
1342 } 1388 }
1343 } 1389 }
1344 } 1390 }
1345 1391
1346 delete list; 1392 delete list;
1347 return next; 1393 return next;
1348} 1394}
1349/*! 1395/*!
1350 \internal 1396 \internal
1351*/ 1397*/
1352// ########## raise()ing main window should raise and set active 1398// ########## raise()ing main window should raise and set active
1353// ########## it and then all childen. This belongs in Qt/Embedded 1399// ########## it and then all childen. This belongs in Qt/Embedded
1354/* 1400/*
1355 * slightly change in behaviour to kill the need of modality in Opie 1401 * slightly change in behaviour to kill the need of modality in Opie
1356 * If any of the topLevelWidgets !isFullyObscured we highlight the next 1402 * If any of the topLevelWidgets !isFullyObscured we highlight the next
1357 * top level window 1403 * top level window
1358 * 1)If visible and not modal we iterate over the list of top level widgets 1404 * 1)If visible and not modal we iterate over the list of top level widgets
1359 * 2)If modal we we make the modal and its parent toplevel widget visible if available 1405 * 2)If modal we we make the modal and its parent toplevel widget visible if available
1360 * 3)else make topLevel visible 1406 * 3)else make topLevel visible
1361 * 1407 *
1362 * send qcop if necessary and save current visible widget if not modal 1408 * send qcop if necessary and save current visible widget if not modal
1363 */ 1409 */
1364bool QPEApplication::raiseAppropriateWindow() 1410bool QPEApplication::raiseAppropriateWindow()
1365{ 1411{
1366 bool r = FALSE; 1412 bool r = FALSE;
1367 1413
1368 QWidget *top = d->qpe_main_widget ? d->qpe_main_widget : mainWidget(); 1414 QWidget *top = d->qpe_main_widget ? d->qpe_main_widget : mainWidget();
1369 /* 1. */ 1415 /* 1. */
1370 if ( ( top && (top->isVisible() ) || ( d->lastWidget && d->lastWidget->isVisible() ) ) && 1416 if ( ( top && (top->isVisible() ) || ( d->lastWidget && d->lastWidget->isVisible() ) ) &&
1371 !activeModalWidget() ) { 1417 !activeModalWidget() ) {
1372 r = TRUE; 1418 r = TRUE;
1373 /*wid will be valid and topLevelWidgets will be deleted properly.. */ 1419 /*wid will be valid and topLevelWidgets will be deleted properly.. */
1374 QWidget *wid = nextWidget( topLevelWidgets(), 1420 QWidget *wid = nextWidget( topLevelWidgets(),
1375 d->lastWidget ? (QWidget*)d->lastWidget : top ); 1421 d->lastWidget ? (QWidget*)d->lastWidget : top );
1376 /* keep the size window got but not for root*/ 1422 /* keep the size window got but not for root*/
1377 if ( top == wid ) 1423 if ( top == wid )
1378 d->show_mx(top, d->nomaximize ); 1424 d->show_mx(top, d->nomaximize );
1379 else 1425 else
1380 wid->show(); 1426 wid->show();
1381 1427
1382 wid->raise(); 1428 wid->raise();
1383 wid->setActiveWindow(); 1429 wid->setActiveWindow();
1384 d->lastWidget = wid; 1430 d->lastWidget = wid;
1385 }else if ( activeModalWidget() ) { 1431 }else if ( activeModalWidget() ) {
1386 QWidget* mod = activeModalWidget(); 1432 QWidget* mod = activeModalWidget();
1387 /* get the parent of the modal and its topLevelWidget as background widget */ 1433 /* get the parent of the modal and its topLevelWidget as background widget */
1388 QWidget* par = activeModalWidget()->parentWidget() ? activeModalWidget()->parentWidget()->topLevelWidget() : 0; 1434 QWidget* par = activeModalWidget()->parentWidget() ? activeModalWidget()->parentWidget()->topLevelWidget() : 0;
1389 if (par ) { 1435 if (par ) {
1390 if (par == top ) 1436 if (par == top )
1391 d->show_mx(par, d->nomaximize ); 1437 d->show_mx(par, d->nomaximize );
1392 else 1438 else
1393 par->show(); 1439 par->show();
1394 par->raise(); 1440 par->raise();
1395 par->setActiveWindow(); 1441 par->setActiveWindow();
1396 } 1442 }
1397 mod->show(); 1443 mod->show();
1398 mod->raise(); 1444 mod->raise();
1399 mod->setActiveWindow(); 1445 mod->setActiveWindow();
1400 }else if (top){ 1446 }else if (top){
1401 d->show_mx(top, d->nomaximize ); 1447 d->show_mx(top, d->nomaximize );
1402 top->raise(); 1448 top->raise();
1403 top->setActiveWindow(); 1449 top->setActiveWindow();
1404 d->lastWidget = top; 1450 d->lastWidget = top;
1405 } 1451 }
1406 1452
1407 if (!r && d->preloaded ) { 1453 if (!r && d->preloaded ) {
1408 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1454 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1409 e << d->appName; 1455 e << d->appName;
1410 } 1456 }
1411 1457
1412 return r; 1458 return r;
1413} 1459}
1414 1460
1415 1461
1416void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1462void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1417{ 1463{
1418#ifdef Q_WS_QWS 1464#ifdef Q_WS_QWS
1419 1465
1420 if ( msg == "quit()" ) { 1466 if ( msg == "quit()" ) {
1421 tryQuit(); 1467 tryQuit();
1422 } 1468 }
1423 else if ( msg == "quitIfInvisible()" ) { 1469 else if ( msg == "quitIfInvisible()" ) {
1424 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1470 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1425 quit(); 1471 quit();
1426 } 1472 }
1427 else if ( msg == "close()" ) { 1473 else if ( msg == "close()" ) {
1428 hideOrQuit(); 1474 hideOrQuit();
1429 } 1475 }
1430 else if ( msg == "disablePreload()" ) { 1476 else if ( msg == "disablePreload()" ) {
1431 d->preloaded = FALSE; 1477 d->preloaded = FALSE;
1432 d->keep_running = TRUE; 1478 d->keep_running = TRUE;
1433 /* so that quit will quit */ 1479 /* so that quit will quit */
1434 } 1480 }
1435 else if ( msg == "enablePreload()" ) { 1481 else if ( msg == "enablePreload()" ) {
1436 if (d->qpe_main_widget) 1482 if (d->qpe_main_widget)
1437 d->preloaded = TRUE; 1483 d->preloaded = TRUE;
1438 d->keep_running = TRUE; 1484 d->keep_running = TRUE;
diff --git a/library/qpeapplication.h b/library/qpeapplication.h
index 343e0b9..42810e8 100644
--- a/library/qpeapplication.h
+++ b/library/qpeapplication.h
@@ -1,207 +1,209 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef __QPE_APPLICATION_H__ 20#ifndef __QPE_APPLICATION_H__
21#define __QPE_APPLICATION_H__ 21#define __QPE_APPLICATION_H__
22 22
23#include <stdlib.h> // for setenv() 23#include <stdlib.h> // for setenv()
24 24
25#include <qglobal.h> 25#include <qglobal.h>
26#include <qapplication.h> 26#include <qapplication.h>
27#include <qdialog.h> 27#include <qdialog.h>
28#include <qwsdisplay_qws.h> 28#include <qwsdisplay_qws.h>
29#if defined(_WS_QWS_) && !defined(Q_WS_QWS) 29#if defined(_WS_QWS_) && !defined(Q_WS_QWS)
30#define Q_WS_QWS 30#define Q_WS_QWS
31#endif 31#endif
32#include "qpedecoration_qws.h" 32#include "qpedecoration_qws.h"
33#include "timestring.h" 33#include "timestring.h"
34 34
35class QCopChannel; 35class QCopChannel;
36class QPEApplicationData; 36class QPEApplicationData;
37class QWSEvent; 37class QWSEvent;
38class QWSKeyEvent; 38class QWSKeyEvent;
39 39
40 40
41class QPEApplication : public QApplication 41class QPEApplication : public QApplication
42{ 42{
43 Q_OBJECT 43 Q_OBJECT
44public: 44public:
45 QPEApplication( int& argc, char **argv, Type=GuiClient ); 45 QPEApplication( int& argc, char **argv, Type=GuiClient );
46 ~QPEApplication(); 46 ~QPEApplication();
47 47
48 static QString qpeDir(); 48 static QString qpeDir();
49 static QString documentDir(); 49 static QString documentDir();
50 void applyStyle(); 50 void applyStyle();
51 void reset();
51 static int defaultRotation(); 52 static int defaultRotation();
52 static void setDefaultRotation(int r); 53 static void setDefaultRotation(int r);
53 static void setCurrentRotation(int r); 54 static void setCurrentRotation(int r);
55 static void setCurrentMode(int x, int y, int depth );
54 static void grabKeyboard(); 56 static void grabKeyboard();
55 static void ungrabKeyboard(); 57 static void ungrabKeyboard();
56 58
57 enum StylusMode { 59 enum StylusMode {
58 LeftOnly, 60 LeftOnly,
59 RightOnHold 61 RightOnHold
60 // RightOnHoldLeftDelayed, etc. 62 // RightOnHoldLeftDelayed, etc.
61 }; 63 };
62 static void setStylusOperation( QWidget*, StylusMode ); 64 static void setStylusOperation( QWidget*, StylusMode );
63 static StylusMode stylusOperation( QWidget* ); 65 static StylusMode stylusOperation( QWidget* );
64 66
65 enum InputMethodHint { 67 enum InputMethodHint {
66 Normal, 68 Normal,
67 AlwaysOff, 69 AlwaysOff,
68 AlwaysOn 70 AlwaysOn
69 }; 71 };
70 72
71 enum screenSaverHint { 73 enum screenSaverHint {
72 Disable = 0, 74 Disable = 0,
73 DisableLightOff = 1, 75 DisableLightOff = 1,
74 DisableSuspend = 2, 76 DisableSuspend = 2,
75 Enable = 100 77 Enable = 100
76 }; 78 };
77 79
78 static void setInputMethodHint( QWidget *, InputMethodHint ); 80 static void setInputMethodHint( QWidget *, InputMethodHint );
79 static InputMethodHint inputMethodHint( QWidget * ); 81 static InputMethodHint inputMethodHint( QWidget * );
80 82
81 void showMainWidget( QWidget*, bool nomax=FALSE ); 83 void showMainWidget( QWidget*, bool nomax=FALSE );
82 void showMainDocumentWidget( QWidget*, bool nomax=FALSE ); 84 void showMainDocumentWidget( QWidget*, bool nomax=FALSE );
83 static void showDialog( QDialog*, bool nomax=FALSE ); 85 static void showDialog( QDialog*, bool nomax=FALSE );
84 static int execDialog( QDialog*, bool nomax=FALSE ); 86 static int execDialog( QDialog*, bool nomax=FALSE );
85 /* Merge setTempScreenSaverMode */ 87 /* Merge setTempScreenSaverMode */
86#ifdef QTOPIA_INTERNAL_INITAPP 88#ifdef QTOPIA_INTERNAL_INITAPP
87 void initApp( int argv, char **argv ); 89 void initApp( int argv, char **argv );
88#endif 90#endif
89 91
90 static void setKeepRunning(); 92 static void setKeepRunning();
91 bool keepRunning() const; 93 bool keepRunning() const;
92 94
93 bool keyboardGrabbed() const; 95 bool keyboardGrabbed() const;
94 96
95 int exec(); 97 int exec();
96 98
97signals: 99signals:
98 void clientMoused(); 100 void clientMoused();
99 void timeChanged(); 101 void timeChanged();
100 void clockChanged( bool pm ); 102 void clockChanged( bool pm );
101 void micChanged( bool muted ); 103 void micChanged( bool muted );
102 void volumeChanged( bool muted ); 104 void volumeChanged( bool muted );
103 void appMessage( const QCString& msg, const QByteArray& data); 105 void appMessage( const QCString& msg, const QByteArray& data);
104 void weekChanged( bool startOnMonday ); 106 void weekChanged( bool startOnMonday );
105 void dateFormatChanged( DateFormat ); 107 void dateFormatChanged( DateFormat );
106 void flush(); 108 void flush();
107 void reload(); 109 void reload();
108 /* linkChanged signal */ 110 /* linkChanged signal */
109 111
110private slots: 112private slots:
111 void systemMessage( const QCString &msg, const QByteArray &data ); 113 void systemMessage( const QCString &msg, const QByteArray &data );
112 void pidMessage( const QCString &msg, const QByteArray &data ); 114 void pidMessage( const QCString &msg, const QByteArray &data );
113 void removeSenderFromStylusDict(); 115 void removeSenderFromStylusDict();
114 void hideOrQuit(); 116 void hideOrQuit();
115 117
116private: 118private:
117 inline QWidget *nextWidget( QWidgetList*, QWidget* ); 119 inline QWidget *nextWidget( QWidgetList*, QWidget* );
118 120
119protected: 121protected:
120 bool qwsEventFilter( QWSEvent * ); 122 bool qwsEventFilter( QWSEvent * );
121 void internalSetStyle( const QString &style ); 123 void internalSetStyle( const QString &style );
122 void prepareForTermination(bool willrestart); 124 void prepareForTermination(bool willrestart);
123 virtual void restart(); 125 virtual void restart();
124 virtual void shutdown(); 126 virtual void shutdown();
125 bool eventFilter( QObject *, QEvent * ); 127 bool eventFilter( QObject *, QEvent * );
126 void timerEvent( QTimerEvent * ); 128 void timerEvent( QTimerEvent * );
127 bool raiseAppropriateWindow(); 129 bool raiseAppropriateWindow();
128 virtual void tryQuit(); 130 virtual void tryQuit();
129#if QT_VERSION > 233 131#if QT_VERSION > 233
130 virtual void polish ( QWidget * ); // this is actually implemented in qt_override.cpp (!) 132 virtual void polish ( QWidget * ); // this is actually implemented in qt_override.cpp (!)
131#endif 133#endif
132private: 134private:
133#ifndef QT_NO_TRANSLATION 135#ifndef QT_NO_TRANSLATION
134 void installTranslation( const QString& baseName ); 136 void installTranslation( const QString& baseName );
135#endif 137#endif
136 void mapToDefaultAction( QWSKeyEvent *ke, int defKey ); 138 void mapToDefaultAction( QWSKeyEvent *ke, int defKey );
137 void processQCopFile(); 139 void processQCopFile();
138 140
139#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 141#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
140 QCopChannel *sysChannel; 142 QCopChannel *sysChannel;
141 QCopChannel *pidChannel; 143 QCopChannel *pidChannel;
142#endif 144#endif
143 QPEApplicationData *d; 145 QPEApplicationData *d;
144 146
145 bool reserved_sh; 147 bool reserved_sh;
146 148
147 149
148 150
149}; 151};
150 152
151inline void QPEApplication::showDialog( QDialog* d, bool nomax ) 153inline void QPEApplication::showDialog( QDialog* d, bool nomax )
152{ 154{
153 QSize sh = d->sizeHint(); 155 QSize sh = d->sizeHint();
154 int w = QMAX(sh.width(),d->width()); 156 int w = QMAX(sh.width(),d->width());
155 int h = QMAX(sh.height(),d->height()); 157 int h = QMAX(sh.height(),d->height());
156 if ( !nomax 158 if ( !nomax
157 && ( w > qApp->desktop()->width()*3/4 159 && ( w > qApp->desktop()->width()*3/4
158 || h > qApp->desktop()->height()*3/4 ) ) 160 || h > qApp->desktop()->height()*3/4 ) )
159 { 161 {
160 d->showMaximized(); 162 d->showMaximized();
161 } else { 163 } else {
162 d->resize(w,h); 164 d->resize(w,h);
163 d->show(); 165 d->show();
164 } 166 }
165} 167}
166 168
167inline int QPEApplication::execDialog( QDialog* d, bool nomax ) 169inline int QPEApplication::execDialog( QDialog* d, bool nomax )
168{ 170{
169 showDialog(d,nomax); 171 showDialog(d,nomax);
170 return d->exec(); 172 return d->exec();
171} 173}
172 174
173enum Transformation { Rot0, Rot90, Rot180, Rot270 }; /* from qgfxtransformed_qws.cpp */ 175enum Transformation { Rot0, Rot90, Rot180, Rot270 }; /* from qgfxtransformed_qws.cpp */
174 176
175inline int TransToDeg ( Transformation t ) 177inline int TransToDeg ( Transformation t )
176{ 178{
177 int d = static_cast<int>( t ); 179 int d = static_cast<int>( t );
178 return d * 90; 180 return d * 90;
179} 181}
180 182
181inline Transformation DegToTrans ( int d ) 183inline Transformation DegToTrans ( int d )
182{ 184{
183 Transformation t = static_cast<Transformation>( d / 90 ); 185 Transformation t = static_cast<Transformation>( d / 90 );
184 return t; 186 return t;
185} 187}
186 188
187/* 189/*
188 * Set current rotation of Opie, and rotation for newly started apps. 190 * Set current rotation of Opie, and rotation for newly started apps.
189 * Differs from setDefaultRotation in that 1) it rotates currently running apps, 191 * Differs from setDefaultRotation in that 1) it rotates currently running apps,
190 * and 2) does not set deforient or save orientation to qpe.conf. 192 * and 2) does not set deforient or save orientation to qpe.conf.
191 */ 193 */
192 194
193inline void QPEApplication::setCurrentRotation( int r ) 195inline void QPEApplication::setCurrentRotation( int r )
194{ 196{
195 // setTransformation has been introduced in Qt/Embedded 2.3.4 snapshots 197 // setTransformation has been introduced in Qt/Embedded 2.3.4 snapshots
196 // for compatibility with the SharpROM use fallback to setDefaultTransformation() 198 // for compatibility with the SharpROM use fallback to setDefaultTransformation()
197#if QT_VERSION > 233 199#if QT_VERSION > 233
198 Transformation e = DegToTrans( r ); 200 Transformation e = DegToTrans( r );
199 ::setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 201 ::setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
200 qApp->desktop()->qwsDisplay()->setTransformation( e ); 202 qApp->desktop()->qwsDisplay()->setTransformation( e );
201#else 203#else
202 setDefaultRotation( r ); 204 setDefaultRotation( r );
203#endif 205#endif
204} 206}
205 207
206 208
207#endif 209#endif