summaryrefslogtreecommitdiff
path: root/library
authorerik <erik>2007-01-24 19:54:07 (UTC)
committer erik <erik>2007-01-24 19:54:07 (UTC)
commit89e81059e832ff77c2f0ac8b9db12f80eafa03fc (patch) (unidiff)
tree99a130fc643d2aeefdecab452f644e7b61a5f50e /library
parent035bbc5bf689839c8d8e7be37f347b0dd900fccf (diff)
downloadopie-89e81059e832ff77c2f0ac8b9db12f80eafa03fc.zip
opie-89e81059e832ff77c2f0ac8b9db12f80eafa03fc.tar.gz
opie-89e81059e832ff77c2f0ac8b9db12f80eafa03fc.tar.bz2
Each file in this commit has an instance where a pointer is checked at
one point in the code and then not checked in another point in the code. If it needed to be checked once, it needs to be checked the other time. If not the application could segfault.
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 34f5e6a..d959c7a 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1004,1293 +1004,1293 @@ QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
1004 \enum QPEApplication::InputMethodHint 1004 \enum QPEApplication::InputMethodHint
1005 1005
1006 \value Normal the application sometimes needs text input (the default). 1006 \value Normal the application sometimes needs text input (the default).
1007 \value AlwaysOff the application never needs text input. 1007 \value AlwaysOff the application never needs text input.
1008 \value AlwaysOn the application always needs text input. 1008 \value AlwaysOn the application always needs text input.
1009*/ 1009*/
1010 1010
1011/*! 1011/*!
1012 Hints to the system that widget \a w has use for text input methods 1012 Hints to the system that widget \a w has use for text input methods
1013 as specified by \a mode. 1013 as specified by \a mode.
1014 1014
1015 \sa inputMethodHint() InputMethodHint 1015 \sa inputMethodHint() InputMethodHint
1016*/ 1016*/
1017void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 1017void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
1018{ 1018{
1019 createInputMethodDict(); 1019 createInputMethodDict();
1020 if ( mode == Normal ) { 1020 if ( mode == Normal ) {
1021 inputMethodDict->remove 1021 inputMethodDict->remove
1022 ( w ); 1022 ( w );
1023 } 1023 }
1024 else { 1024 else {
1025 inputMethodDict->insert( w, ( void* ) mode ); 1025 inputMethodDict->insert( w, ( void* ) mode );
1026 } 1026 }
1027} 1027}
1028 1028
1029class HackDialog : public QDialog 1029class HackDialog : public QDialog
1030{ 1030{
1031public: 1031public:
1032 void acceptIt() 1032 void acceptIt()
1033 { 1033 {
1034 accept(); 1034 accept();
1035 } 1035 }
1036 void rejectIt() 1036 void rejectIt()
1037 { 1037 {
1038 reject(); 1038 reject();
1039 } 1039 }
1040}; 1040};
1041 1041
1042 1042
1043void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 1043void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
1044{ 1044{
1045 // specialised actions for certain widgets. May want to 1045 // specialised actions for certain widgets. May want to
1046 // add more stuff here. 1046 // add more stuff here.
1047 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 1047 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
1048 && activePopupWidget() ->parentWidget() 1048 && activePopupWidget() ->parentWidget()
1049 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 1049 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
1050 key = Qt::Key_Return; 1050 key = Qt::Key_Return;
1051 1051
1052 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 1052 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
1053 key = Qt::Key_Return; 1053 key = Qt::Key_Return;
1054 1054
1055#ifdef QWS 1055#ifdef QWS
1056 1056
1057 ke->simpleData.keycode = key; 1057 ke->simpleData.keycode = key;
1058#endif 1058#endif
1059} 1059}
1060 1060
1061 1061
1062/*! 1062/*!
1063 \internal 1063 \internal
1064*/ 1064*/
1065 1065
1066#ifdef QWS 1066#ifdef QWS
1067bool QPEApplication::qwsEventFilter( QWSEvent * e ) 1067bool QPEApplication::qwsEventFilter( QWSEvent * e )
1068{ 1068{
1069 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 1069 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
1070 if ( qApp->type() != QApplication::GuiServer ) { 1070 if ( qApp->type() != QApplication::GuiServer ) {
1071 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 1071 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
1072 e << d->appName; 1072 e << d->appName;
1073 } 1073 }
1074 d->notbusysent = TRUE; 1074 d->notbusysent = TRUE;
1075 } 1075 }
1076 if ( type() == GuiServer ) { 1076 if ( type() == GuiServer ) {
1077 switch ( e->type ) { 1077 switch ( e->type ) {
1078 case QWSEvent::Mouse: 1078 case QWSEvent::Mouse:
1079 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 1079 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
1080 emit clientMoused(); 1080 emit clientMoused();
1081 break; 1081 break;
1082 default: 1082 default:
1083 break; 1083 break;
1084 } 1084 }
1085 } 1085 }
1086 if ( e->type == QWSEvent::Key ) { 1086 if ( e->type == QWSEvent::Key ) {
1087 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 1087 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
1088 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 1088 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
1089 // Use special "OK" key to press "OK" on top level widgets 1089 // Use special "OK" key to press "OK" on top level widgets
1090 QWidget * active = activeWindow(); 1090 QWidget * active = activeWindow();
1091 QWidget *popup = 0; 1091 QWidget *popup = 0;
1092 if ( active && active->isPopup() ) { 1092 if ( active && active->isPopup() ) {
1093 popup = active; 1093 popup = active;
1094 active = active->parentWidget(); 1094 active = active->parentWidget();
1095 } 1095 }
1096 if ( active && ( int ) active->winId() == ke->simpleData.window && 1096 if ( active && ( int ) active->winId() == ke->simpleData.window &&
1097 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 1097 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
1098 if ( ke->simpleData.is_press ) { 1098 if ( ke->simpleData.is_press ) {
1099 if ( popup ) 1099 if ( popup )
1100 popup->close(); 1100 popup->close();
1101 if ( active->inherits( "QDialog" ) ) { 1101 if ( active->inherits( "QDialog" ) ) {
1102 HackDialog * d = ( HackDialog * ) active; 1102 HackDialog * d = ( HackDialog * ) active;
1103 d->acceptIt(); 1103 d->acceptIt();
1104 return TRUE; 1104 return TRUE;
1105 } 1105 }
1106 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 1106 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
1107 QSignal s; 1107 QSignal s;
1108 s.connect( active, SLOT( accept() ) ); 1108 s.connect( active, SLOT( accept() ) );
1109 s.activate(); 1109 s.activate();
1110 } 1110 }
1111 else { 1111 else {
1112 // do the same as with the select key: Map to the default action of the widget: 1112 // do the same as with the select key: Map to the default action of the widget:
1113 mapToDefaultAction( ke, Qt::Key_Return ); 1113 mapToDefaultAction( ke, Qt::Key_Return );
1114 } 1114 }
1115 } 1115 }
1116 } 1116 }
1117 } 1117 }
1118 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 1118 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
1119 // Use special "select" key to do whatever default action a widget has 1119 // Use special "select" key to do whatever default action a widget has
1120 mapToDefaultAction( ke, Qt::Key_Space ); 1120 mapToDefaultAction( ke, Qt::Key_Space );
1121 } 1121 }
1122 else if ( ke->simpleData.keycode == Qt::Key_Escape && 1122 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
1123 ke->simpleData.is_press ) { 1123 ke->simpleData.is_press ) {
1124 // Escape key closes app if focus on toplevel 1124 // Escape key closes app if focus on toplevel
1125 QWidget * active = activeWindow(); 1125 QWidget * active = activeWindow();
1126 if ( active && active->testWFlags( WType_TopLevel ) && 1126 if ( active && active->testWFlags( WType_TopLevel ) &&
1127 ( int ) active->winId() == ke->simpleData.window && 1127 ( int ) active->winId() == ke->simpleData.window &&
1128 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 1128 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
1129 if ( active->inherits( "QDialog" ) ) { 1129 if ( active->inherits( "QDialog" ) ) {
1130 HackDialog * d = ( HackDialog * ) active; 1130 HackDialog * d = ( HackDialog * ) active;
1131 d->rejectIt(); 1131 d->rejectIt();
1132 return TRUE; 1132 return TRUE;
1133 } else /*if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 )*/ { 1133 } else /*if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 )*/ {
1134 active->close(); 1134 active->close();
1135 } 1135 }
1136 } 1136 }
1137 1137
1138 } 1138 }
1139 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { 1139 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) {
1140 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) 1140 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... ))
1141 // but we cannot access libopie function within libqpe :( 1141 // but we cannot access libopie function within libqpe :(
1142 1142
1143 QWidget * active = activeWindow ( ); 1143 QWidget * active = activeWindow ( );
1144 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { 1144 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) {
1145 if ( d-> kbgrabbed ) { // we grabbed the keyboard 1145 if ( d-> kbgrabbed ) { // we grabbed the keyboard
1146 QChar ch ( ke-> simpleData.unicode ); 1146 QChar ch ( ke-> simpleData.unicode );
1147 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, 1147 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease,
1148 ke-> simpleData.keycode, 1148 ke-> simpleData.keycode,
1149 ch. latin1 ( ), 1149 ch. latin1 ( ),
1150 ke-> simpleData.modifiers, 1150 ke-> simpleData.modifiers,
1151 QString ( ch ), 1151 QString ( ch ),
1152 ke-> simpleData.is_auto_repeat, 1 ); 1152 ke-> simpleData.is_auto_repeat, 1 );
1153 1153
1154 QObject *which = QWidget::keyboardGrabber ( ); 1154 QObject *which = QWidget::keyboardGrabber ( );
1155 if ( !which ) 1155 if ( !which )
1156 which = QApplication::focusWidget ( ); 1156 which = QApplication::focusWidget ( );
1157 if ( !which ) 1157 if ( !which )
1158 which = QApplication::activeWindow ( ); 1158 which = QApplication::activeWindow ( );
1159 if ( !which ) 1159 if ( !which )
1160 which = qApp; 1160 which = qApp;
1161 1161
1162 QApplication::sendEvent ( which, &qke ); 1162 QApplication::sendEvent ( which, &qke );
1163 } 1163 }
1164 else { // we didn't grab the keyboard, so send the event to the launcher 1164 else { // we didn't grab the keyboard, so send the event to the launcher
1165 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); 1165 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" );
1166 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat ); 1166 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat );
1167 } 1167 }
1168 } 1168 }
1169 return true; 1169 return true;
1170 } 1170 }
1171 } 1171 }
1172 if ( e->type == QWSEvent::Focus ) { 1172 if ( e->type == QWSEvent::Focus ) {
1173 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 1173 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
1174 if ( !fe->simpleData.get_focus ) { 1174 if ( !fe->simpleData.get_focus ) {
1175 QWidget * active = activeWindow(); 1175 QWidget * active = activeWindow();
1176 while ( active && active->isPopup() ) { 1176 while ( active && active->isPopup() ) {
1177 active->close(); 1177 active->close();
1178 active = activeWindow(); 1178 active = activeWindow();
1179 } 1179 }
1180 } 1180 }
1181 else { 1181 else {
1182 // make sure our modal widget is ALWAYS on top 1182 // make sure our modal widget is ALWAYS on top
1183 QWidget *topm = activeModalWidget(); 1183 QWidget *topm = activeModalWidget();
1184 if ( topm && static_cast<int>( topm->winId() ) != fe->simpleData.window) { 1184 if ( topm && static_cast<int>( topm->winId() ) != fe->simpleData.window) {
1185 topm->raise(); 1185 topm->raise();
1186 } 1186 }
1187 } 1187 }
1188 if ( fe->simpleData.get_focus && inputMethodDict ) { 1188 if ( fe->simpleData.get_focus && inputMethodDict ) {
1189 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 1189 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
1190 if ( m == AlwaysOff ) 1190 if ( m == AlwaysOff )
1191 Global::hideInputMethod(); 1191 Global::hideInputMethod();
1192 if ( m == AlwaysOn ) 1192 if ( m == AlwaysOn )
1193 Global::showInputMethod(); 1193 Global::showInputMethod();
1194 } 1194 }
1195 } 1195 }
1196 1196
1197 1197
1198 return QApplication::qwsEventFilter( e ); 1198 return QApplication::qwsEventFilter( e );
1199} 1199}
1200#endif 1200#endif
1201 1201
1202/*! 1202/*!
1203 Destroys the QPEApplication. 1203 Destroys the QPEApplication.
1204*/ 1204*/
1205QPEApplication::~QPEApplication() 1205QPEApplication::~QPEApplication()
1206{ 1206{
1207 ungrabKeyboard(); 1207 ungrabKeyboard();
1208#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 1208#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
1209 // Need to delete QCopChannels early, since the display will 1209 // Need to delete QCopChannels early, since the display will
1210 // be gone by the time we get to ~QObject(). 1210 // be gone by the time we get to ~QObject().
1211 delete sysChannel; 1211 delete sysChannel;
1212 delete pidChannel; 1212 delete pidChannel;
1213#endif 1213#endif
1214 1214
1215#ifdef OPIE_WITHROHFEEDBACK 1215#ifdef OPIE_WITHROHFEEDBACK
1216 if( d->RoH ) 1216 if( d->RoH )
1217 delete d->RoH; 1217 delete d->RoH;
1218#endif 1218#endif
1219 delete d; 1219 delete d;
1220} 1220}
1221 1221
1222/*! 1222/*!
1223 Returns <tt>$OPIEDIR/</tt>. 1223 Returns <tt>$OPIEDIR/</tt>.
1224*/ 1224*/
1225QString QPEApplication::qpeDir() 1225QString QPEApplication::qpeDir()
1226{ 1226{
1227 QString base, dir; 1227 QString base, dir;
1228 1228
1229 if (getenv( "OPIEDIR" )) 1229 if (getenv( "OPIEDIR" ))
1230 base = QString(getenv("OPIEDIR")).stripWhiteSpace(); 1230 base = QString(getenv("OPIEDIR")).stripWhiteSpace();
1231 if ( !base.isNull() && (base.length() > 0 )){ 1231 if ( !base.isNull() && (base.length() > 0 )){
1232#ifdef Q_OS_WIN32 1232#ifdef Q_OS_WIN32
1233 QString temp(base); 1233 QString temp(base);
1234 if (temp[(int)temp.length()-1] != QDir::separator()) 1234 if (temp[(int)temp.length()-1] != QDir::separator())
1235 temp.append(QDir::separator()); 1235 temp.append(QDir::separator());
1236 dir = temp; 1236 dir = temp;
1237#else 1237#else
1238 dir = QString( base ) + "/"; 1238 dir = QString( base ) + "/";
1239#endif 1239#endif
1240 }else{ 1240 }else{
1241 dir = QString( ".." ) + QDir::separator(); 1241 dir = QString( ".." ) + QDir::separator();
1242 } 1242 }
1243 1243
1244 return dir; 1244 return dir;
1245} 1245}
1246 1246
1247/*! 1247/*!
1248 Returns the user's current Document directory. There is a trailing "/". 1248 Returns the user's current Document directory. There is a trailing "/".
1249 .. well, it does now,, and there's no trailing '/' 1249 .. well, it does now,, and there's no trailing '/'
1250*/ 1250*/
1251QString QPEApplication::documentDir() 1251QString QPEApplication::documentDir()
1252{ 1252{
1253 const char* base = getenv( "HOME"); 1253 const char* base = getenv( "HOME");
1254 if ( base ) 1254 if ( base )
1255 return QString( base ) + "/Documents"; 1255 return QString( base ) + "/Documents";
1256 1256
1257 return QString( "../Documents" ); 1257 return QString( "../Documents" );
1258} 1258}
1259 1259
1260static int deforient = -1; 1260static int deforient = -1;
1261 1261
1262/*! 1262/*!
1263 \internal 1263 \internal
1264*/ 1264*/
1265int QPEApplication::defaultRotation() 1265int QPEApplication::defaultRotation()
1266{ 1266{
1267 if ( deforient < 0 ) { 1267 if ( deforient < 0 ) {
1268 QString d = getenv( "QWS_DISPLAY" ); 1268 QString d = getenv( "QWS_DISPLAY" );
1269 if ( d.contains( "Rot90" ) ) { 1269 if ( d.contains( "Rot90" ) ) {
1270 deforient = 90; 1270 deforient = 90;
1271 } 1271 }
1272 else if ( d.contains( "Rot180" ) ) { 1272 else if ( d.contains( "Rot180" ) ) {
1273 deforient = 180; 1273 deforient = 180;
1274 } 1274 }
1275 else if ( d.contains( "Rot270" ) ) { 1275 else if ( d.contains( "Rot270" ) ) {
1276 deforient = 270; 1276 deforient = 270;
1277 } 1277 }
1278 else { 1278 else {
1279 deforient = 0; 1279 deforient = 0;
1280 } 1280 }
1281 } 1281 }
1282 return deforient; 1282 return deforient;
1283} 1283}
1284 1284
1285/*! 1285/*!
1286 \internal 1286 \internal
1287*/ 1287*/
1288void QPEApplication::setDefaultRotation( int r ) 1288void QPEApplication::setDefaultRotation( int r )
1289{ 1289{
1290 if ( qApp->type() == GuiServer ) { 1290 if ( qApp->type() == GuiServer ) {
1291 deforient = r; 1291 deforient = r;
1292 int j = 0; 1292 int j = 0;
1293 QCString old = getenv( "QWS_DISPLAY" ) ? getenv( "QWS_DISPLAY" ) : "Transformed"; 1293 QCString old = getenv( "QWS_DISPLAY" ) ? getenv( "QWS_DISPLAY" ) : "Transformed";
1294 QString driver( old.left( ( ( j = old.find( ':' ) ) >= 0 ) ? j : old.size() ).data() ); 1294 QString driver( old.left( ( ( j = old.find( ':' ) ) >= 0 ) ? j : old.size() ).data() );
1295 setenv( "QWS_DISPLAY", QString( "%1:Rot%2:0" ).arg(driver).arg( r ).latin1(), 1 ); 1295 setenv( "QWS_DISPLAY", QString( "%1:Rot%2:0" ).arg(driver).arg( r ).latin1(), 1 );
1296 Config config("qpe"); 1296 Config config("qpe");
1297 config.setGroup( "Rotation" ); 1297 config.setGroup( "Rotation" );
1298 config.writeEntry( "Rot", r ); 1298 config.writeEntry( "Rot", r );
1299 } 1299 }
1300 else { 1300 else {
1301#ifndef QT_NO_COP 1301#ifndef QT_NO_COP
1302 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 1302 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
1303 e << r; 1303 e << r;
1304 } 1304 }
1305#endif 1305#endif
1306 1306
1307 } 1307 }
1308} 1308}
1309 1309
1310#include <qgfx_qws.h> 1310#include <qgfx_qws.h>
1311#include <qwindowsystem_qws.h> 1311#include <qwindowsystem_qws.h>
1312 1312
1313#if QT_VERSION > 236 1313#if QT_VERSION > 236
1314extern void qws_clearLoadedFonts(); 1314extern void qws_clearLoadedFonts();
1315#endif 1315#endif
1316 1316
1317void QPEApplication::setCurrentMode( int x, int y, int depth ) 1317void QPEApplication::setCurrentMode( int x, int y, int depth )
1318{ 1318{
1319 // Reset the caches 1319 // Reset the caches
1320#if QT_VERSION > 236 1320#if QT_VERSION > 236
1321 qws_clearLoadedFonts(); 1321 qws_clearLoadedFonts();
1322#endif 1322#endif
1323 QPixmapCache::clear(); 1323 QPixmapCache::clear();
1324 1324
1325 // Change the screen mode 1325 // Change the screen mode
1326 qt_screen->setMode(x, y, depth); 1326 qt_screen->setMode(x, y, depth);
1327 1327
1328 if ( qApp->type() == GuiServer ) { 1328 if ( qApp->type() == GuiServer ) {
1329#if QT_VERSION > 236 1329#if QT_VERSION > 236
1330 // Reconfigure the GuiServer 1330 // Reconfigure the GuiServer
1331 qwsServer->beginDisplayReconfigure(); 1331 qwsServer->beginDisplayReconfigure();
1332 qwsServer->endDisplayReconfigure(); 1332 qwsServer->endDisplayReconfigure();
1333#endif 1333#endif
1334 // Get all the running apps to reset 1334 // Get all the running apps to reset
1335 QCopEnvelope env( "QPE/System", "reset()" ); 1335 QCopEnvelope env( "QPE/System", "reset()" );
1336 } 1336 }
1337} 1337}
1338 1338
1339void QPEApplication::reset() { 1339void QPEApplication::reset() {
1340 // Reconnect to the screen 1340 // Reconnect to the screen
1341 qt_screen->disconnect(); 1341 qt_screen->disconnect();
1342 qt_screen->connect( QString::null ); 1342 qt_screen->connect( QString::null );
1343 1343
1344 // Redraw everything 1344 // Redraw everything
1345 applyStyle(); 1345 applyStyle();
1346} 1346}
1347 1347
1348#if (QT_VERSION < 238) && defined Q_OS_MACX 1348#if (QT_VERSION < 238) && defined Q_OS_MACX
1349bool qt_left_hand_scrollbars = false; 1349bool qt_left_hand_scrollbars = false;
1350#else 1350#else
1351extern bool qt_left_hand_scrollbars QPE_WEAK_SYMBOL; 1351extern bool qt_left_hand_scrollbars QPE_WEAK_SYMBOL;
1352#endif 1352#endif
1353 1353
1354/*! 1354/*!
1355 \internal 1355 \internal
1356*/ 1356*/
1357void QPEApplication::applyStyle() 1357void QPEApplication::applyStyle()
1358{ 1358{
1359 Config config( "qpe" ); 1359 Config config( "qpe" );
1360 config.setGroup( "Appearance" ); 1360 config.setGroup( "Appearance" );
1361 1361
1362#if QT_VERSION > 233 1362#if QT_VERSION > 233
1363 // Widget style 1363 // Widget style
1364 QString style = config.readEntry( "Style", "FlatStyle" ); 1364 QString style = config.readEntry( "Style", "FlatStyle" );
1365 1365
1366 internalSetStyle ( style ); 1366 internalSetStyle ( style );
1367 1367
1368 // Colors - from /etc/colors/Liquid.scheme 1368 // Colors - from /etc/colors/Liquid.scheme
1369 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) ); 1369 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) );
1370 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) ); 1370 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) );
1371 QPalette pal( btncolor, bgcolor ); 1371 QPalette pal( btncolor, bgcolor );
1372 QString color = config.readEntry( "Highlight", "#73adef" ); 1372 QString color = config.readEntry( "Highlight", "#73adef" );
1373 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 1373 pal.setColor( QColorGroup::Highlight, QColor( color ) );
1374 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 1374 color = config.readEntry( "HighlightedText", "#FFFFFF" );
1375 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 1375 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
1376 color = config.readEntry( "Text", "#000000" ); 1376 color = config.readEntry( "Text", "#000000" );
1377 pal.setColor( QColorGroup::Text, QColor( color ) ); 1377 pal.setColor( QColorGroup::Text, QColor( color ) );
1378 color = config.readEntry( "ButtonText", "#000000" ); 1378 color = config.readEntry( "ButtonText", "#000000" );
1379 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 1379 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
1380 color = config.readEntry( "Base", "#FFFFFF" ); 1380 color = config.readEntry( "Base", "#FFFFFF" );
1381 pal.setColor( QColorGroup::Base, QColor( color ) ); 1381 pal.setColor( QColorGroup::Base, QColor( color ) );
1382 1382
1383 pal.setColor( QPalette::Disabled, QColorGroup::Text, 1383 pal.setColor( QPalette::Disabled, QColorGroup::Text,
1384 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 1384 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
1385 1385
1386 setPalette( pal, TRUE ); 1386 setPalette( pal, TRUE );
1387 1387
1388 1388
1389 // Set the ScrollBar on the 'right' side but only if the weak symbol is present 1389 // Set the ScrollBar on the 'right' side but only if the weak symbol is present
1390 if (&qt_left_hand_scrollbars ) 1390 if (&qt_left_hand_scrollbars )
1391 qt_left_hand_scrollbars = config.readBoolEntry( "LeftHand", false ); 1391 qt_left_hand_scrollbars = config.readBoolEntry( "LeftHand", false );
1392 1392
1393 // Window Decoration 1393 // Window Decoration
1394 QString dec = config.readEntry( "Decoration", "Flat" ); 1394 QString dec = config.readEntry( "Decoration", "Flat" );
1395 1395
1396 if ( dec != d->decorationName ) { 1396 if ( dec != d->decorationName ) {
1397 qwsSetDecoration( new QPEDecoration( dec ) ); 1397 qwsSetDecoration( new QPEDecoration( dec ) );
1398 d->decorationName = dec; 1398 d->decorationName = dec;
1399 } 1399 }
1400 1400
1401 // Font 1401 // Font
1402 QString ff = config.readEntry( "FontFamily", font().family() ); 1402 QString ff = config.readEntry( "FontFamily", font().family() );
1403 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 1403 int fs = config.readNumEntry( "FontSize", font().pointSize() );
1404 1404
1405 setFont ( QFont ( ff, fs ), true ); 1405 setFont ( QFont ( ff, fs ), true );
1406#endif 1406#endif
1407} 1407}
1408 1408
1409void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1409void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1410{ 1410{
1411#ifdef Q_WS_QWS 1411#ifdef Q_WS_QWS
1412 QDataStream stream( data, IO_ReadOnly ); 1412 QDataStream stream( data, IO_ReadOnly );
1413 if ( msg == "applyStyle()" ) { 1413 if ( msg == "applyStyle()" ) {
1414 applyStyle(); 1414 applyStyle();
1415 } 1415 }
1416 else if ( msg == "toggleApplicationMenu()" ) { 1416 else if ( msg == "toggleApplicationMenu()" ) {
1417 QWidget *active = activeWindow ( ); 1417 QWidget *active = activeWindow ( );
1418 1418
1419 if ( active ) { 1419 if ( active ) {
1420 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( ); 1420 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( );
1421 bool oldactive = man-> isActive ( ); 1421 bool oldactive = man-> isActive ( );
1422 1422
1423 man-> setActive( !man-> isActive() ); 1423 man-> setActive( !man-> isActive() );
1424 1424
1425 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu 1425 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu
1426 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" ); 1426 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" );
1427 } 1427 }
1428 } 1428 }
1429 } 1429 }
1430 else if ( msg == "setDefaultRotation(int)" ) { 1430 else if ( msg == "setDefaultRotation(int)" ) {
1431 if ( type() == GuiServer ) { 1431 if ( type() == GuiServer ) {
1432 int r; 1432 int r;
1433 stream >> r; 1433 stream >> r;
1434 setDefaultRotation( r ); 1434 setDefaultRotation( r );
1435 } 1435 }
1436 } 1436 }
1437 else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net> 1437 else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net>
1438 if ( type() == GuiServer ) { 1438 if ( type() == GuiServer ) {
1439 int x, y, depth; 1439 int x, y, depth;
1440 stream >> x; 1440 stream >> x;
1441 stream >> y; 1441 stream >> y;
1442 stream >> depth; 1442 stream >> depth;
1443 setCurrentMode( x, y, depth ); 1443 setCurrentMode( x, y, depth );
1444 } 1444 }
1445 } 1445 }
1446 else if ( msg == "reset()" ) { 1446 else if ( msg == "reset()" ) {
1447 if ( type() != GuiServer ) 1447 if ( type() != GuiServer )
1448 reset(); 1448 reset();
1449 } 1449 }
1450 else if ( msg == "setCurrentRotation(int)" ) { 1450 else if ( msg == "setCurrentRotation(int)" ) {
1451 int r; 1451 int r;
1452 stream >> r; 1452 stream >> r;
1453 setCurrentRotation( r ); 1453 setCurrentRotation( r );
1454 } 1454 }
1455 else if ( msg == "shutdown()" ) { 1455 else if ( msg == "shutdown()" ) {
1456 if ( type() == GuiServer ) 1456 if ( type() == GuiServer )
1457 shutdown(); 1457 shutdown();
1458 } 1458 }
1459 else if ( msg == "quit()" ) { 1459 else if ( msg == "quit()" ) {
1460 if ( type() != GuiServer ) 1460 if ( type() != GuiServer )
1461 tryQuit(); 1461 tryQuit();
1462 } 1462 }
1463 else if ( msg == "forceQuit()" ) { 1463 else if ( msg == "forceQuit()" ) {
1464 if ( type() != GuiServer ) 1464 if ( type() != GuiServer )
1465 quit(); 1465 quit();
1466 } 1466 }
1467 else if ( msg == "restart()" ) { 1467 else if ( msg == "restart()" ) {
1468 if ( type() == GuiServer ) 1468 if ( type() == GuiServer )
1469 restart(); 1469 restart();
1470 } 1470 }
1471 else if ( msg == "language(QString)" ) { 1471 else if ( msg == "language(QString)" ) {
1472 if ( type() == GuiServer ) { 1472 if ( type() == GuiServer ) {
1473 QString l; 1473 QString l;
1474 stream >> l; 1474 stream >> l;
1475 QString cl = getenv( "LANG" ); 1475 QString cl = getenv( "LANG" );
1476 if ( cl != l ) { 1476 if ( cl != l ) {
1477 if ( l.isNull() ) 1477 if ( l.isNull() )
1478 unsetenv( "LANG" ); 1478 unsetenv( "LANG" );
1479 else 1479 else
1480 setenv( "LANG", l.latin1(), 1 ); 1480 setenv( "LANG", l.latin1(), 1 );
1481 restart(); 1481 restart();
1482 } 1482 }
1483 } 1483 }
1484 } 1484 }
1485 else if ( msg == "timeChange(QString)" ) { 1485 else if ( msg == "timeChange(QString)" ) {
1486 QString t; 1486 QString t;
1487 stream >> t; 1487 stream >> t;
1488 if ( t.isNull() ) 1488 if ( t.isNull() )
1489 unsetenv( "TZ" ); 1489 unsetenv( "TZ" );
1490 else 1490 else
1491 setenv( "TZ", t.latin1(), 1 ); 1491 setenv( "TZ", t.latin1(), 1 );
1492 // emit the signal so everyone else knows... 1492 // emit the signal so everyone else knows...
1493 emit timeChanged(); 1493 emit timeChanged();
1494 } 1494 }
1495 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1495 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1496 if ( type() == GuiServer ) { 1496 if ( type() == GuiServer ) {
1497 QDateTime when; 1497 QDateTime when;
1498 QCString channel, message; 1498 QCString channel, message;
1499 int data; 1499 int data;
1500 stream >> when >> channel >> message >> data; 1500 stream >> when >> channel >> message >> data;
1501 AlarmServer::addAlarm( when, channel, message, data ); 1501 AlarmServer::addAlarm( when, channel, message, data );
1502 } 1502 }
1503 } 1503 }
1504 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1504 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1505 if ( type() == GuiServer ) { 1505 if ( type() == GuiServer ) {
1506 QDateTime when; 1506 QDateTime when;
1507 QCString channel, message; 1507 QCString channel, message;
1508 int data; 1508 int data;
1509 stream >> when >> channel >> message >> data; 1509 stream >> when >> channel >> message >> data;
1510 AlarmServer::deleteAlarm( when, channel, message, data ); 1510 AlarmServer::deleteAlarm( when, channel, message, data );
1511 } 1511 }
1512 } 1512 }
1513 else if ( msg == "clockChange(bool)" ) { 1513 else if ( msg == "clockChange(bool)" ) {
1514 int tmp; 1514 int tmp;
1515 stream >> tmp; 1515 stream >> tmp;
1516 emit clockChanged( tmp ); 1516 emit clockChanged( tmp );
1517 } 1517 }
1518 else if ( msg == "weekChange(bool)" ) { 1518 else if ( msg == "weekChange(bool)" ) {
1519 int tmp; 1519 int tmp;
1520 stream >> tmp; 1520 stream >> tmp;
1521 emit weekChanged( tmp ); 1521 emit weekChanged( tmp );
1522 } 1522 }
1523 else if ( msg == "setDateFormat(DateFormat)" ) { 1523 else if ( msg == "setDateFormat(DateFormat)" ) {
1524 DateFormat tmp; 1524 DateFormat tmp;
1525 stream >> tmp; 1525 stream >> tmp;
1526 emit dateFormatChanged( tmp ); 1526 emit dateFormatChanged( tmp );
1527 } 1527 }
1528 else if ( msg == "setVolume(int,int)" ) { 1528 else if ( msg == "setVolume(int,int)" ) {
1529 int t, v; 1529 int t, v;
1530 stream >> t >> v; 1530 stream >> t >> v;
1531 setVolume( t, v ); 1531 setVolume( t, v );
1532 emit volumeChanged( muted ); 1532 emit volumeChanged( muted );
1533 } 1533 }
1534 else if ( msg == "volumeChange(bool)" ) { 1534 else if ( msg == "volumeChange(bool)" ) {
1535 stream >> muted; 1535 stream >> muted;
1536 setVolume(); 1536 setVolume();
1537 emit volumeChanged( muted ); 1537 emit volumeChanged( muted );
1538 } 1538 }
1539 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1539 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1540 int t, v; 1540 int t, v;
1541 stream >> t >> v; 1541 stream >> t >> v;
1542 setMic( t, v ); 1542 setMic( t, v );
1543 emit micChanged( micMuted ); 1543 emit micChanged( micMuted );
1544 } 1544 }
1545 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1545 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1546 stream >> micMuted; 1546 stream >> micMuted;
1547 setMic(); 1547 setMic();
1548 emit micChanged( micMuted ); 1548 emit micChanged( micMuted );
1549 } 1549 }
1550 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1550 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1551 int t, v; 1551 int t, v;
1552 stream >> t >> v; 1552 stream >> t >> v;
1553 setBass( t, v ); 1553 setBass( t, v );
1554 } 1554 }
1555 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1555 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1556 setBass(); 1556 setBass();
1557 } 1557 }
1558 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1558 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1559 int t, v; 1559 int t, v;
1560 stream >> t >> v; 1560 stream >> t >> v;
1561 setTreble( t, v ); 1561 setTreble( t, v );
1562 } 1562 }
1563 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1563 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1564 setTreble(); 1564 setTreble();
1565 } else if ( msg == "getMarkedText()" ) { 1565 } else if ( msg == "getMarkedText()" ) {
1566 if ( type() == GuiServer ) { 1566 if ( type() == GuiServer ) {
1567 const ushort unicode = 'C'-'@'; 1567 const ushort unicode = 'C'-'@';
1568 const int scan = Key_C; 1568 const int scan = Key_C;
1569 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); 1569 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
1570 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); 1570 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
1571 } 1571 }
1572 } else if ( msg == "newChannel(QString)") { 1572 } else if ( msg == "newChannel(QString)") {
1573 QString myChannel = "QPE/Application/" + d->appName; 1573 QString myChannel = "QPE/Application/" + d->appName;
1574 QString channel; 1574 QString channel;
1575 stream >> channel; 1575 stream >> channel;
1576 if (channel == myChannel) { 1576 if (channel == myChannel) {
1577 processQCopFile(); 1577 processQCopFile();
1578 d->sendQCopQ(); 1578 d->sendQCopQ();
1579 } 1579 }
1580 } 1580 }
1581 1581
1582 1582
1583#endif 1583#endif
1584} 1584}
1585 1585
1586 1586
1587 1587
1588 1588
1589 1589
1590/*! 1590/*!
1591 \internal 1591 \internal
1592*/ 1592*/
1593bool QPEApplication::raiseAppropriateWindow() 1593bool QPEApplication::raiseAppropriateWindow()
1594{ 1594{
1595 bool r=FALSE; 1595 bool r=FALSE;
1596 1596
1597 // 1. Raise the main widget 1597 // 1. Raise the main widget
1598 QWidget *top = d->qpe_main_widget; 1598 QWidget *top = d->qpe_main_widget;
1599 if ( !top ) top = mainWidget(); 1599 if ( !top ) top = mainWidget();
1600 1600
1601 if ( top && d->keep_running ) { 1601 if ( top && d->keep_running ) {
1602 if ( top->isVisible() ) 1602 if ( top->isVisible() )
1603 r = TRUE; 1603 r = TRUE;
1604 else if (d->preloaded) { 1604 else if (d->preloaded) {
1605 // We are preloaded and not visible.. pretend we just started.. 1605 // We are preloaded and not visible.. pretend we just started..
1606#ifndef QT_NO_COP 1606#ifndef QT_NO_COP
1607 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1607 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1608 e << d->appName; 1608 e << d->appName;
1609#endif 1609#endif
1610 } 1610 }
1611 1611
1612 d->show_mx(top,d->nomaximize, d->appName); 1612 d->show_mx(top,d->nomaximize, d->appName);
1613 top->raise(); 1613 top->raise();
1614 } 1614 }
1615 1615
1616 QWidget *topm = activeModalWidget(); 1616 QWidget *topm = activeModalWidget();
1617 1617
1618 // 2. Raise any parentless widgets (except top and topm, as they 1618 // 2. Raise any parentless widgets (except top and topm, as they
1619 // are raised before and after this loop). Order from most 1619 // are raised before and after this loop). Order from most
1620 // recently raised as deepest to least recently as top, so 1620 // recently raised as deepest to least recently as top, so
1621 // that repeated calls cycle through widgets. 1621 // that repeated calls cycle through widgets.
1622 QWidgetList *list = topLevelWidgets(); 1622 QWidgetList *list = topLevelWidgets();
1623 if ( list ) { 1623 if ( list ) {
1624 bool foundlast = FALSE; 1624 bool foundlast = FALSE;
1625 QWidget* topsub = 0; 1625 QWidget* topsub = 0;
1626 if ( d->lastraised ) { 1626 if ( d->lastraised ) {
1627 for (QWidget* w = list->first(); w; w = list->next()) { 1627 for (QWidget* w = list->first(); w; w = list->next()) {
1628 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1628 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1629 if ( w == d->lastraised ) 1629 if ( w == d->lastraised )
1630 foundlast = TRUE; 1630 foundlast = TRUE;
1631 if ( foundlast ) { 1631 if ( foundlast ) {
1632 w->raise(); 1632 w->raise();
1633 topsub = w; 1633 topsub = w;
1634 } 1634 }
1635 } 1635 }
1636 } 1636 }
1637 } 1637 }
1638 for (QWidget* w = list->first(); w; w = list->next()) { 1638 for (QWidget* w = list->first(); w; w = list->next()) {
1639 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1639 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1640 if ( w == d->lastraised ) 1640 if ( w == d->lastraised )
1641 break; 1641 break;
1642 w->raise(); 1642 w->raise();
1643 topsub = w; 1643 topsub = w;
1644 } 1644 }
1645 } 1645 }
1646 d->lastraised = topsub; 1646 d->lastraised = topsub;
1647 delete list; 1647 delete list;
1648 } 1648 }
1649 1649
1650 // 3. Raise the active modal widget. 1650 // 3. Raise the active modal widget.
1651 if ( topm ) { 1651 if ( topm ) {
1652 topm->show(); 1652 topm->show();
1653 topm->raise(); 1653 topm->raise();
1654 // If we haven't already handled the fastAppShowing message 1654 // If we haven't already handled the fastAppShowing message
1655 if (!top && d->preloaded) { 1655 if (!top && d->preloaded) {
1656#ifndef QT_NO_COP 1656#ifndef QT_NO_COP
1657 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1657 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1658 e << d->appName; 1658 e << d->appName;
1659#endif 1659#endif
1660 } 1660 }
1661 r = FALSE; 1661 r = FALSE;
1662 } 1662 }
1663 1663
1664 return r; 1664 return r;
1665} 1665}
1666 1666
1667 1667
1668void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1668void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1669{ 1669{
1670#ifdef Q_WS_QWS 1670#ifdef Q_WS_QWS
1671 1671
1672 if ( msg == "quit()" ) { 1672 if ( msg == "quit()" ) {
1673 tryQuit(); 1673 tryQuit();
1674 } 1674 }
1675 else if ( msg == "quitIfInvisible()" ) { 1675 else if ( msg == "quitIfInvisible()" ) {
1676 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1676 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1677 quit(); 1677 quit();
1678 } 1678 }
1679 else if ( msg == "close()" ) { 1679 else if ( msg == "close()" ) {
1680 hideOrQuit(); 1680 hideOrQuit();
1681 } 1681 }
1682 else if ( msg == "disablePreload()" ) { 1682 else if ( msg == "disablePreload()" ) {
1683 d->preloaded = FALSE; 1683 d->preloaded = FALSE;
1684 d->keep_running = TRUE; 1684 d->keep_running = TRUE;
1685 /* so that quit will quit */ 1685 /* so that quit will quit */
1686 } 1686 }
1687 else if ( msg == "enablePreload()" ) { 1687 else if ( msg == "enablePreload()" ) {
1688 if (d->qpe_main_widget) 1688 if (d->qpe_main_widget)
1689 d->preloaded = TRUE; 1689 d->preloaded = TRUE;
1690 d->keep_running = TRUE; 1690 d->keep_running = TRUE;
1691 /* so next quit won't quit */ 1691 /* so next quit won't quit */
1692 } 1692 }
1693 else if ( msg == "raise()" ) { 1693 else if ( msg == "raise()" ) {
1694 d->keep_running = TRUE; 1694 d->keep_running = TRUE;
1695 d->notbusysent = FALSE; 1695 d->notbusysent = FALSE;
1696 raiseAppropriateWindow(); 1696 raiseAppropriateWindow();
1697 // Tell the system we're still chugging along... 1697 // Tell the system we're still chugging along...
1698 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1698 QCopEnvelope e("QPE/System", "appRaised(QString)");
1699 e << d->appName; 1699 e << d->appName;
1700 } 1700 }
1701 else if ( msg == "flush()" ) { 1701 else if ( msg == "flush()" ) {
1702 emit flush(); 1702 emit flush();
1703 // we need to tell the desktop 1703 // we need to tell the desktop
1704 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1704 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1705 e << d->appName; 1705 e << d->appName;
1706 } 1706 }
1707 else if ( msg == "reload()" ) { 1707 else if ( msg == "reload()" ) {
1708 emit reload(); 1708 emit reload();
1709 } 1709 }
1710 else if ( msg == "setDocument(QString)" ) { 1710 else if ( msg == "setDocument(QString)" ) {
1711 d->keep_running = TRUE; 1711 d->keep_running = TRUE;
1712 QDataStream stream( data, IO_ReadOnly ); 1712 QDataStream stream( data, IO_ReadOnly );
1713 QString doc; 1713 QString doc;
1714 stream >> doc; 1714 stream >> doc;
1715 QWidget *mw = mainWidget(); 1715 QWidget *mw = mainWidget();
1716 if ( !mw ) 1716 if ( !mw )
1717 mw = d->qpe_main_widget; 1717 mw = d->qpe_main_widget;
1718 if ( mw ) 1718 if ( mw )
1719 Global::setDocument( mw, doc ); 1719 Global::setDocument( mw, doc );
1720 1720
1721 } else if ( msg == "QPEProcessQCop()" ) { 1721 } else if ( msg == "QPEProcessQCop()" ) {
1722 processQCopFile(); 1722 processQCopFile();
1723 d->sendQCopQ(); 1723 d->sendQCopQ();
1724 }else 1724 }else
1725 { 1725 {
1726 bool p = d->keep_running; 1726 bool p = d->keep_running;
1727 d->keep_running = FALSE; 1727 d->keep_running = FALSE;
1728 emit appMessage( msg, data); 1728 emit appMessage( msg, data);
1729 if ( d->keep_running ) { 1729 if ( d->keep_running ) {
1730 d->notbusysent = FALSE; 1730 d->notbusysent = FALSE;
1731 raiseAppropriateWindow(); 1731 raiseAppropriateWindow();
1732 if ( !p ) { 1732 if ( !p ) {
1733 // Tell the system we're still chugging along... 1733 // Tell the system we're still chugging along...
1734#ifndef QT_NO_COP 1734#ifndef QT_NO_COP
1735 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1735 QCopEnvelope e("QPE/System", "appRaised(QString)");
1736 e << d->appName; 1736 e << d->appName;
1737#endif 1737#endif
1738 } 1738 }
1739 } 1739 }
1740 if ( p ) 1740 if ( p )
1741 d->keep_running = p; 1741 d->keep_running = p;
1742 } 1742 }
1743#endif 1743#endif
1744} 1744}
1745 1745
1746 1746
1747/*! 1747/*!
1748 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1748 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1749 consider passing TRUE for \a nomaximize rather than the default FALSE. 1749 consider passing TRUE for \a nomaximize rather than the default FALSE.
1750 1750
1751 \sa showMainDocumentWidget() 1751 \sa showMainDocumentWidget()
1752*/ 1752*/
1753void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) 1753void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
1754{ 1754{
1755// setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit 1755// setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit
1756 d->show(mw, nomaximize ); 1756 d->show(mw, nomaximize );
1757} 1757}
1758 1758
1759/*! 1759/*!
1760 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1760 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1761 consider passing TRUE for \a nomaximize rather than the default FALSE. 1761 consider passing TRUE for \a nomaximize rather than the default FALSE.
1762 1762
1763 This calls designates the application as 1763 This calls designates the application as
1764 a \link docwidget.html document-oriented\endlink application. 1764 a \link docwidget.html document-oriented\endlink application.
1765 1765
1766 The \a mw widget \e must have this slot: setDocument(const QString&). 1766 The \a mw widget \e must have this slot: setDocument(const QString&).
1767 1767
1768 \sa showMainWidget() 1768 \sa showMainWidget()
1769*/ 1769*/
1770void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) 1770void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1771{ 1771{
1772 if ( mw && argc() == 2 ) 1772 if ( mw ) {
1773 Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); 1773 if ( argc() == 2 )
1774 Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
1774 1775
1775 1776 d->show(mw, nomaximize );
1776// setMainWidget(mw); see above 1777 }
1777 d->show(mw, nomaximize );
1778} 1778}
1779 1779
1780 1780
1781/*! 1781/*!
1782 If an application is started via a \link qcop.html QCop\endlink 1782 If an application is started via a \link qcop.html QCop\endlink
1783 message, the application will process the \link qcop.html 1783 message, the application will process the \link qcop.html
1784 QCop\endlink message and then quit. If the application calls this 1784 QCop\endlink message and then quit. If the application calls this
1785 function while processing a \link qcop.html QCop\endlink message, 1785 function while processing a \link qcop.html QCop\endlink message,
1786 after processing its outstanding \link qcop.html QCop\endlink 1786 after processing its outstanding \link qcop.html QCop\endlink
1787 messages the application will start 'properly' and show itself. 1787 messages the application will start 'properly' and show itself.
1788 1788
1789 \sa keepRunning() 1789 \sa keepRunning()
1790*/ 1790*/
1791void QPEApplication::setKeepRunning() 1791void QPEApplication::setKeepRunning()
1792{ 1792{
1793 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1793 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1794 QPEApplication * qpeApp = ( QPEApplication* ) qApp; 1794 QPEApplication * qpeApp = ( QPEApplication* ) qApp;
1795 qpeApp->d->keep_running = TRUE; 1795 qpeApp->d->keep_running = TRUE;
1796 } 1796 }
1797} 1797}
1798 1798
1799/*! 1799/*!
1800 Returns TRUE if the application will quit after processing the 1800 Returns TRUE if the application will quit after processing the
1801 current list of qcop messages; otherwise returns FALSE. 1801 current list of qcop messages; otherwise returns FALSE.
1802 1802
1803 \sa setKeepRunning() 1803 \sa setKeepRunning()
1804*/ 1804*/
1805bool QPEApplication::keepRunning() const 1805bool QPEApplication::keepRunning() const
1806{ 1806{
1807 return d->keep_running; 1807 return d->keep_running;
1808} 1808}
1809 1809
1810/*! 1810/*!
1811 \internal 1811 \internal
1812*/ 1812*/
1813void QPEApplication::internalSetStyle( const QString &style ) 1813void QPEApplication::internalSetStyle( const QString &style )
1814{ 1814{
1815#if QT_VERSION >= 0x030000 1815#if QT_VERSION >= 0x030000
1816 if ( style == "QPE" ) { 1816 if ( style == "QPE" ) {
1817 setStyle( new QPEStyle ); 1817 setStyle( new QPEStyle );
1818 } 1818 }
1819 else { 1819 else {
1820 QStyle *s = QStyleFactory::create( style ); 1820 QStyle *s = QStyleFactory::create( style );
1821 if ( s ) 1821 if ( s )
1822 setStyle( s ); 1822 setStyle( s );
1823 } 1823 }
1824#else 1824#else
1825 if ( style == "Windows" ) { 1825 if ( style == "Windows" ) {
1826 setStyle( new QWindowsStyle ); 1826 setStyle( new QWindowsStyle );
1827 } 1827 }
1828 else if ( style == "QPE" ) { 1828 else if ( style == "QPE" ) {
1829 setStyle( new QPEStyle ); 1829 setStyle( new QPEStyle );
1830 } 1830 }
1831 else if ( style == "Light" ) { 1831 else if ( style == "Light" ) {
1832 setStyle( new LightStyle ); 1832 setStyle( new LightStyle );
1833 } 1833 }
1834#ifndef QT_NO_STYLE_PLATINUM 1834#ifndef QT_NO_STYLE_PLATINUM
1835 else if ( style == "Platinum" ) { 1835 else if ( style == "Platinum" ) {
1836 setStyle( new QPlatinumStyle ); 1836 setStyle( new QPlatinumStyle );
1837 } 1837 }
1838#endif 1838#endif
1839#ifndef QT_NO_STYLE_MOTIF 1839#ifndef QT_NO_STYLE_MOTIF
1840 else if ( style == "Motif" ) { 1840 else if ( style == "Motif" ) {
1841 setStyle( new QMotifStyle ); 1841 setStyle( new QMotifStyle );
1842 } 1842 }
1843#endif 1843#endif
1844#ifndef QT_NO_STYLE_MOTIFPLUS 1844#ifndef QT_NO_STYLE_MOTIFPLUS
1845 else if ( style == "MotifPlus" ) { 1845 else if ( style == "MotifPlus" ) {
1846 setStyle( new QMotifPlusStyle ); 1846 setStyle( new QMotifPlusStyle );
1847 } 1847 }
1848#endif 1848#endif
1849 1849
1850 else { 1850 else {
1851 QStyle *sty = 0; 1851 QStyle *sty = 0;
1852 QString path = QPEApplication::qpeDir ( ) + "plugins/styles/"; 1852 QString path = QPEApplication::qpeDir ( ) + "plugins/styles/";
1853 1853
1854#ifdef Q_OS_MACX 1854#ifdef Q_OS_MACX
1855 if ( style. find ( ".dylib" ) > 0 ) 1855 if ( style. find ( ".dylib" ) > 0 )
1856 path += style; 1856 path += style;
1857 else 1857 else
1858 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility 1858 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility
1859#else 1859#else
1860 if ( style. find ( ".so" ) > 0 ) 1860 if ( style. find ( ".so" ) > 0 )
1861 path += style; 1861 path += style;
1862 else 1862 else
1863 path = path + "lib" + style. lower ( ) + ".so"; // compatibility 1863 path = path + "lib" + style. lower ( ) + ".so"; // compatibility
1864#endif 1864#endif
1865 static QLibrary *lastlib = 0; 1865 static QLibrary *lastlib = 0;
1866 static StyleInterface *lastiface = 0; 1866 static StyleInterface *lastiface = 0;
1867 1867
1868 QLibrary *lib = new QLibrary ( path ); 1868 QLibrary *lib = new QLibrary ( path );
1869 StyleInterface *iface = 0; 1869 StyleInterface *iface = 0;
1870 1870
1871 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) 1871 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface )
1872 sty = iface-> style ( ); 1872 sty = iface-> style ( );
1873 1873
1874 if ( sty ) { 1874 if ( sty ) {
1875 setStyle ( sty ); 1875 setStyle ( sty );
1876 1876
1877 if ( lastiface ) 1877 if ( lastiface )
1878 lastiface-> release ( ); 1878 lastiface-> release ( );
1879 lastiface = iface; 1879 lastiface = iface;
1880 1880
1881 if ( lastlib ) { 1881 if ( lastlib ) {
1882 lastlib-> unload ( ); 1882 lastlib-> unload ( );
1883 delete lastlib; 1883 delete lastlib;
1884 } 1884 }
1885 lastlib = lib; 1885 lastlib = lib;
1886 } 1886 }
1887 else { 1887 else {
1888 if ( iface ) 1888 if ( iface )
1889 iface-> release ( ); 1889 iface-> release ( );
1890 delete lib; 1890 delete lib;
1891 1891
1892 setStyle ( new LightStyle ( )); 1892 setStyle ( new LightStyle ( ));
1893 } 1893 }
1894 } 1894 }
1895#endif 1895#endif
1896} 1896}
1897 1897
1898/*! 1898/*!
1899 \internal 1899 \internal
1900*/ 1900*/
1901void QPEApplication::prepareForTermination( bool willrestart ) 1901void QPEApplication::prepareForTermination( bool willrestart )
1902{ 1902{
1903 if ( willrestart ) { 1903 if ( willrestart ) {
1904 QLabel *lblWait = new QLabel( tr( "Please wait..." ), 0, "wait hack", QWidget::WStyle_Customize | 1904 QLabel *lblWait = new QLabel( tr( "Please wait..." ), 0, "wait hack", QWidget::WStyle_Customize |
1905 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 1905 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
1906 lblWait->setAlignment( QWidget::AlignCenter ); 1906 lblWait->setAlignment( QWidget::AlignCenter );
1907 lblWait->show(); 1907 lblWait->show();
1908 lblWait->showMaximized(); 1908 lblWait->showMaximized();
1909 } 1909 }
1910 { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); 1910 { QCopEnvelope envelope( "QPE/System", "forceQuit()" );
1911 } 1911 }
1912 processEvents(); // ensure the message goes out. 1912 processEvents(); // ensure the message goes out.
1913} 1913}
1914 1914
1915/*! 1915/*!
1916 \internal 1916 \internal
1917*/ 1917*/
1918void QPEApplication::shutdown() 1918void QPEApplication::shutdown()
1919{ 1919{
1920 // Implement in server's QPEApplication subclass 1920 // Implement in server's QPEApplication subclass
1921} 1921}
1922 1922
1923/*! 1923/*!
1924 \internal 1924 \internal
1925*/ 1925*/
1926void QPEApplication::restart() 1926void QPEApplication::restart()
1927{ 1927{
1928 // Implement in server's QPEApplication subclass 1928 // Implement in server's QPEApplication subclass
1929} 1929}
1930 1930
1931static QPtrDict<void>* stylusDict = 0; 1931static QPtrDict<void>* stylusDict = 0;
1932static void createDict() 1932static void createDict()
1933{ 1933{
1934 if ( !stylusDict ) 1934 if ( !stylusDict )
1935 stylusDict = new QPtrDict<void>; 1935 stylusDict = new QPtrDict<void>;
1936} 1936}
1937 1937
1938/*! 1938/*!
1939 Returns the current StylusMode for widget \a w. 1939 Returns the current StylusMode for widget \a w.
1940 1940
1941 \sa setStylusOperation() StylusMode 1941 \sa setStylusOperation() StylusMode
1942*/ 1942*/
1943QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 1943QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
1944{ 1944{
1945 if ( stylusDict ) 1945 if ( stylusDict )
1946 return ( StylusMode ) ( int ) stylusDict->find( w ); 1946 return ( StylusMode ) ( int ) stylusDict->find( w );
1947 return LeftOnly; 1947 return LeftOnly;
1948} 1948}
1949 1949
1950/*! 1950/*!
1951 \enum QPEApplication::StylusMode 1951 \enum QPEApplication::StylusMode
1952 1952
1953 \value LeftOnly the stylus only generates LeftButton 1953 \value LeftOnly the stylus only generates LeftButton
1954 events (the default). 1954 events (the default).
1955 \value RightOnHold the stylus generates RightButton events 1955 \value RightOnHold the stylus generates RightButton events
1956 if the user uses the press-and-hold gesture. 1956 if the user uses the press-and-hold gesture.
1957 1957
1958 \sa setStylusOperation() stylusOperation() 1958 \sa setStylusOperation() stylusOperation()
1959*/ 1959*/
1960 1960
1961/*! 1961/*!
1962 Causes widget \a w to receive mouse events according to the stylus 1962 Causes widget \a w to receive mouse events according to the stylus
1963 \a mode. 1963 \a mode.
1964 1964
1965 \sa stylusOperation() StylusMode 1965 \sa stylusOperation() StylusMode
1966*/ 1966*/
1967void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) 1967void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode )
1968{ 1968{
1969 createDict(); 1969 createDict();
1970 if ( mode == LeftOnly ) { 1970 if ( mode == LeftOnly ) {
1971 stylusDict->remove 1971 stylusDict->remove
1972 ( w ); 1972 ( w );
1973 w->removeEventFilter( qApp ); 1973 w->removeEventFilter( qApp );
1974 } 1974 }
1975 else { 1975 else {
1976 stylusDict->insert( w, ( void* ) mode ); 1976 stylusDict->insert( w, ( void* ) mode );
1977 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); 1977 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) );
1978 w->installEventFilter( qApp ); 1978 w->installEventFilter( qApp );
1979 } 1979 }
1980} 1980}
1981 1981
1982 1982
1983/*! 1983/*!
1984 \reimp 1984 \reimp
1985*/ 1985*/
1986bool QPEApplication::eventFilter( QObject *o, QEvent *e ) 1986bool QPEApplication::eventFilter( QObject *o, QEvent *e )
1987{ 1987{
1988 if ( !o->isWidgetType() ) 1988 if ( !o->isWidgetType() )
1989 return FALSE; 1989 return FALSE;
1990 1990
1991 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { 1991 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
1992 QMouseEvent * me = ( QMouseEvent* ) e; 1992 QMouseEvent * me = ( QMouseEvent* ) e;
1993 StylusMode mode = (StylusMode)(int)stylusDict->find(o); 1993 StylusMode mode = (StylusMode)(int)stylusDict->find(o);
1994 switch (mode) { 1994 switch (mode) {
1995 case RightOnHold: 1995 case RightOnHold:
1996 switch ( me->type() ) { 1996 switch ( me->type() ) {
1997 case QEvent::MouseButtonPress: 1997 case QEvent::MouseButtonPress:
1998 if ( me->button() == LeftButton ) { 1998 if ( me->button() == LeftButton ) {
1999 static long Pref = 500; // #### pref. 1999 static long Pref = 500; // #### pref.
2000 d->presswidget = (QWidget*)o; 2000 d->presswidget = (QWidget*)o;
2001 d->presspos = me->pos(); 2001 d->presspos = me->pos();
2002 d->rightpressed = FALSE; 2002 d->rightpressed = FALSE;
2003#ifdef OPIE_WITHROHFEEDBACK 2003#ifdef OPIE_WITHROHFEEDBACK
2004 if( ! d->RoH ) 2004 if( ! d->RoH )
2005 d->RoH = new Opie::Internal::RoHFeedback; 2005 d->RoH = new Opie::Internal::RoHFeedback;
2006 2006
2007 d->RoH->init( me->globalPos(), d->presswidget ); 2007 d->RoH->init( me->globalPos(), d->presswidget );
2008 Pref = d->RoH->delay(); 2008 Pref = d->RoH->delay();
2009 2009
2010#endif 2010#endif
2011 if (!d->presstimer ) 2011 if (!d->presstimer )
2012 d->presstimer = startTimer( Pref ); // #### pref. 2012 d->presstimer = startTimer( Pref ); // #### pref.
2013 2013
2014 } 2014 }
2015 break; 2015 break;
2016 case QEvent::MouseMove: 2016 case QEvent::MouseMove:
2017 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) { 2017 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) {
2018 killTimer(d->presstimer); 2018 killTimer(d->presstimer);
2019#ifdef OPIE_WITHROHFEEDBACK 2019#ifdef OPIE_WITHROHFEEDBACK
2020 d->RoH->stop(); 2020 d->RoH->stop();
2021#endif 2021#endif
2022 d->presstimer = 0; 2022 d->presstimer = 0;
2023 } 2023 }
2024 break; 2024 break;
2025 case QEvent::MouseButtonRelease: 2025 case QEvent::MouseButtonRelease:
2026 if ( me->button() == LeftButton ) { 2026 if ( me->button() == LeftButton ) {
2027 if ( d->presstimer ) { 2027 if ( d->presstimer ) {
2028 killTimer(d->presstimer); 2028 killTimer(d->presstimer);
2029#ifdef OPIE_WITHROHFEEDBACK 2029#ifdef OPIE_WITHROHFEEDBACK
2030 d->RoH->stop( ); 2030 d->RoH->stop( );
2031#endif 2031#endif
2032 d->presstimer = 0; 2032 d->presstimer = 0;
2033 } 2033 }
2034 if ( d->rightpressed && d->presswidget ) { 2034 if ( d->rightpressed && d->presswidget ) {
2035 printf( "Send ButtonRelease\n" ); 2035 printf( "Send ButtonRelease\n" );
2036 // Right released 2036 // Right released
2037 postEvent( d->presswidget, 2037 postEvent( d->presswidget,
2038 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), 2038 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
2039 RightButton, LeftButton + RightButton ) ); 2039 RightButton, LeftButton + RightButton ) );
2040 // Left released, off-widget 2040 // Left released, off-widget
2041 postEvent( d->presswidget, 2041 postEvent( d->presswidget,
2042 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), 2042 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1),
2043 LeftButton, LeftButton ) ); 2043 LeftButton, LeftButton ) );
2044 postEvent( d->presswidget, 2044 postEvent( d->presswidget,
2045 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), 2045 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1),
2046 LeftButton, LeftButton ) ); 2046 LeftButton, LeftButton ) );
2047 d->rightpressed = FALSE; 2047 d->rightpressed = FALSE;
2048 return TRUE; // don't send the real Left release 2048 return TRUE; // don't send the real Left release
2049 } 2049 }
2050 } 2050 }
2051 break; 2051 break;
2052 default: 2052 default:
2053 break; 2053 break;
2054 } 2054 }
2055 break; 2055 break;
2056 default: 2056 default:
2057 ; 2057 ;
2058 } 2058 }
2059 } 2059 }
2060 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 2060 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
2061 QKeyEvent *ke = (QKeyEvent *)e; 2061 QKeyEvent *ke = (QKeyEvent *)e;
2062 if ( ke->key() == Key_Enter ) { 2062 if ( ke->key() == Key_Enter ) {
2063 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 2063 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
2064 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 2064 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
2065 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 2065 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
2066 return TRUE; 2066 return TRUE;
2067 } 2067 }
2068 } 2068 }
2069 } 2069 }
2070 return FALSE; 2070 return FALSE;
2071} 2071}
2072 2072
2073/*! 2073/*!
2074 \reimp 2074 \reimp
2075*/ 2075*/
2076void QPEApplication::timerEvent( QTimerEvent *e ) 2076void QPEApplication::timerEvent( QTimerEvent *e )
2077{ 2077{
2078 if ( e->timerId() == d->presstimer && d->presswidget ) { 2078 if ( e->timerId() == d->presstimer && d->presswidget ) {
2079 2079
2080 // Right pressed 2080 // Right pressed
2081 postEvent( d->presswidget, 2081 postEvent( d->presswidget,
2082 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 2082 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
2083 RightButton, LeftButton ) ); 2083 RightButton, LeftButton ) );
2084 killTimer( d->presstimer ); 2084 killTimer( d->presstimer );
2085 d->presstimer = 0; 2085 d->presstimer = 0;
2086 d->rightpressed = TRUE; 2086 d->rightpressed = TRUE;
2087#ifdef OPIE_WITHROHFEEDBACK 2087#ifdef OPIE_WITHROHFEEDBACK
2088 d->RoH->stop(); 2088 d->RoH->stop();
2089#endif 2089#endif
2090 } 2090 }
2091} 2091}
2092 2092
2093void QPEApplication::removeSenderFromStylusDict() 2093void QPEApplication::removeSenderFromStylusDict()
2094{ 2094{
2095 stylusDict->remove 2095 stylusDict->remove
2096 ( ( void* ) sender() ); 2096 ( ( void* ) sender() );
2097 if ( d->presswidget == sender() ) 2097 if ( d->presswidget == sender() )
2098 d->presswidget = 0; 2098 d->presswidget = 0;
2099} 2099}
2100 2100
2101/*! 2101/*!
2102 \internal 2102 \internal
2103*/ 2103*/
2104bool QPEApplication::keyboardGrabbed() const 2104bool QPEApplication::keyboardGrabbed() const
2105{ 2105{
2106 return d->kbgrabbed; 2106 return d->kbgrabbed;
2107} 2107}
2108 2108
2109 2109
2110/*! 2110/*!
2111 Reverses the effect of grabKeyboard(). This is called automatically 2111 Reverses the effect of grabKeyboard(). This is called automatically
2112 on program exit. 2112 on program exit.
2113*/ 2113*/
2114void QPEApplication::ungrabKeyboard() 2114void QPEApplication::ungrabKeyboard()
2115{ 2115{
2116 ((QPEApplication *) qApp )-> d-> kbgrabbed = false; 2116 ((QPEApplication *) qApp )-> d-> kbgrabbed = false;
2117} 2117}
2118 2118
2119/*! 2119/*!
2120 Grabs the physical keyboard keys, e.g. the application's launching 2120 Grabs the physical keyboard keys, e.g. the application's launching
2121 keys. Instead of launching applications when these keys are pressed 2121 keys. Instead of launching applications when these keys are pressed
2122 the signals emitted are sent to this application instead. Some games 2122 the signals emitted are sent to this application instead. Some games
2123 programs take over the launch keys in this way to make interaction 2123 programs take over the launch keys in this way to make interaction
2124 easier. 2124 easier.
2125 2125
2126 \sa ungrabKeyboard() 2126 \sa ungrabKeyboard()
2127*/ 2127*/
2128void QPEApplication::grabKeyboard() 2128void QPEApplication::grabKeyboard()
2129{ 2129{
2130 ((QPEApplication *) qApp )-> d-> kbgrabbed = true; 2130 ((QPEApplication *) qApp )-> d-> kbgrabbed = true;
2131} 2131}
2132 2132
2133/*! 2133/*!
2134 \reimp 2134 \reimp
2135*/ 2135*/
2136int QPEApplication::exec() 2136int QPEApplication::exec()
2137{ 2137{
2138 d->qcopQok = true; 2138 d->qcopQok = true;
2139#ifndef QT_NO_COP 2139#ifndef QT_NO_COP
2140 d->sendQCopQ(); 2140 d->sendQCopQ();
2141 if ( !d->keep_running ) 2141 if ( !d->keep_running )
2142 processEvents(); // we may have received QCop messages in the meantime. 2142 processEvents(); // we may have received QCop messages in the meantime.
2143#endif 2143#endif
2144 2144
2145 if ( d->keep_running ) 2145 if ( d->keep_running )
2146 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 2146 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
2147 return QApplication::exec(); 2147 return QApplication::exec();
2148 2148
2149#ifndef QT_NO_COP 2149#ifndef QT_NO_COP
2150 2150
2151 { 2151 {
2152 QCopEnvelope e( "QPE/System", "closing(QString)" ); 2152 QCopEnvelope e( "QPE/System", "closing(QString)" );
2153 e << d->appName; 2153 e << d->appName;
2154 } 2154 }
2155#endif 2155#endif
2156 processEvents(); 2156 processEvents();
2157 return 0; 2157 return 0;
2158} 2158}
2159 2159
2160/*! 2160/*!
2161 \internal 2161 \internal
2162 External request for application to quit. Quits if possible without 2162 External request for application to quit. Quits if possible without
2163 loosing state. 2163 loosing state.
2164*/ 2164*/
2165void QPEApplication::tryQuit() 2165void QPEApplication::tryQuit()
2166{ 2166{
2167 if ( activeModalWidget() ) 2167 if ( activeModalWidget() )
2168 return ; // Inside modal loop or konsole. Too hard to save state. 2168 return ; // Inside modal loop or konsole. Too hard to save state.
2169#ifndef QT_NO_COP 2169#ifndef QT_NO_COP
2170 2170
2171 { 2171 {
2172 QCopEnvelope e( "QPE/System", "closing(QString)" ); 2172 QCopEnvelope e( "QPE/System", "closing(QString)" );
2173 e << d->appName; 2173 e << d->appName;
2174 } 2174 }
2175#endif 2175#endif
2176 if ( d->keep_running ) 2176 if ( d->keep_running )
2177 d->store_widget_rect(d->qpe_main_widget, d->appName); 2177 d->store_widget_rect(d->qpe_main_widget, d->appName);
2178 processEvents(); 2178 processEvents();
2179 2179
2180 quit(); 2180 quit();
2181} 2181}
2182 2182
2183 2183
2184/*! 2184/*!
2185 \internal 2185 \internal
2186 User initiated quit. Makes the window 'Go Away'. If preloaded this means 2186 User initiated quit. Makes the window 'Go Away'. If preloaded this means
2187 hiding the window. If not it means quitting the application. 2187 hiding the window. If not it means quitting the application.
2188 As this is user initiated we don't need to check state. 2188 As this is user initiated we don't need to check state.
2189*/ 2189*/
2190void QPEApplication::hideOrQuit() 2190void QPEApplication::hideOrQuit()
2191{ 2191{
2192 if ( d->keep_running ) 2192 if ( d->keep_running )
2193 d->store_widget_rect(d->qpe_main_widget, d->appName); 2193 d->store_widget_rect(d->qpe_main_widget, d->appName);
2194 processEvents(); 2194 processEvents();
2195 2195
2196 // If we are a preloaded application we don't actually quit, so emit 2196 // If we are a preloaded application we don't actually quit, so emit
2197 // a System message indicating we're quasi-closing. 2197 // a System message indicating we're quasi-closing.
2198 if ( d->preloaded && d->qpe_main_widget ) 2198 if ( d->preloaded && d->qpe_main_widget )
2199#ifndef QT_NO_COP 2199#ifndef QT_NO_COP
2200 2200
2201 { 2201 {
2202 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 2202 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
2203 e << d->appName; 2203 e << d->appName;
2204 d->qpe_main_widget->hide(); 2204 d->qpe_main_widget->hide();
2205 } 2205 }
2206#endif 2206#endif
2207 else 2207 else
2208 quit(); 2208 quit();
2209} 2209}
2210 2210
2211bool QPEApplication::isSaveWindowsPos() 2211bool QPEApplication::isSaveWindowsPos()
2212{ 2212{
2213 return saveWindowsPos; 2213 return saveWindowsPos;
2214} 2214}
2215 2215
2216#if (__GNUC__ > 2 ) && !defined(_OS_MACX_) 2216#if (__GNUC__ > 2 ) && !defined(_OS_MACX_)
2217extern "C" void __cxa_pure_virtual(); 2217extern "C" void __cxa_pure_virtual();
2218 2218
2219void __cxa_pure_virtual() 2219void __cxa_pure_virtual()
2220{ 2220{
2221 fprintf( stderr, "Pure virtual called\n"); 2221 fprintf( stderr, "Pure virtual called\n");
2222 abort(); 2222 abort();
2223 2223
2224} 2224}
2225 2225
2226#endif 2226#endif
2227 2227
2228 2228
2229#if defined(OPIE_NEW_MALLOC) 2229#if defined(OPIE_NEW_MALLOC)
2230 2230
2231// The libraries with the skiff package (and possibly others) have 2231// The libraries with the skiff package (and possibly others) have
2232// completely useless implementations of builtin new and delete that 2232// completely useless implementations of builtin new and delete that
2233// use about 50% of your CPU. Here we revert to the simple libc 2233// use about 50% of your CPU. Here we revert to the simple libc
2234// functions. 2234// functions.
2235 2235
2236void* operator new[]( size_t size ) 2236void* operator new[]( size_t size )
2237{ 2237{
2238 return malloc( size ); 2238 return malloc( size );
2239} 2239}
2240 2240
2241void* operator new( size_t size ) 2241void* operator new( size_t size )
2242{ 2242{
2243 return malloc( size ); 2243 return malloc( size );
2244} 2244}
2245 2245
2246void operator delete[]( void* p ) 2246void operator delete[]( void* p )
2247{ 2247{
2248 if ( p ) 2248 if ( p )
2249 free( p ); 2249 free( p );
2250} 2250}
2251 2251
2252void operator delete[]( void* p, size_t /*size*/ ) 2252void operator delete[]( void* p, size_t /*size*/ )
2253{ 2253{
2254 if ( p ) 2254 if ( p )
2255 free( p ); 2255 free( p );
2256} 2256}
2257 2257
2258 2258
2259void operator delete( void* p ) 2259void operator delete( void* p )
2260{ 2260{
2261 if ( p ) 2261 if ( p )
2262 free( p ); 2262 free( p );
2263} 2263}
2264 2264
2265void operator delete( void* p, size_t /*size*/ ) 2265void operator delete( void* p, size_t /*size*/ )
2266{ 2266{
2267 if ( p ) 2267 if ( p )
2268 free( p ); 2268 free( p );
2269} 2269}
2270 2270
2271#endif 2271#endif
2272 2272
2273#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 2273#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
2274#include <qwidgetlist.h> 2274#include <qwidgetlist.h>
2275#ifdef QWS 2275#ifdef QWS
2276#include <qgfx_qws.h> 2276#include <qgfx_qws.h>
2277extern QRect qt_maxWindowRect; 2277extern QRect qt_maxWindowRect;
2278void qt_setMaxWindowRect(const QRect& r ) 2278void qt_setMaxWindowRect(const QRect& r )
2279{ 2279{
2280 qt_maxWindowRect = qt_screen->mapFromDevice( r, 2280 qt_maxWindowRect = qt_screen->mapFromDevice( r,
2281 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); 2281 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) );
2282 // Re-resize any maximized windows 2282 // Re-resize any maximized windows
2283 QWidgetList* l = QApplication::topLevelWidgets(); 2283 QWidgetList* l = QApplication::topLevelWidgets();
2284 if ( l ) { 2284 if ( l ) {
2285 QWidget * w = l->first(); 2285 QWidget * w = l->first();
2286 while ( w ) { 2286 while ( w ) {
2287 if ( w->isVisible() && w->isMaximized() ) { 2287 if ( w->isVisible() && w->isMaximized() ) {
2288 w->showMaximized(); 2288 w->showMaximized();
2289 } 2289 }
2290 w = l->next(); 2290 w = l->next();
2291 } 2291 }
2292 delete l; 2292 delete l;
2293 } 2293 }
2294} 2294}
2295#endif 2295#endif
2296#endif 2296#endif