author | zecke <zecke> | 2004-04-05 13:11:21 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-04-05 13:11:21 (UTC) |
commit | 3c2e23bacf25fc73d51bfa98a3b2ea9c0890d540 (patch) (unidiff) | |
tree | 7541a347abc4b028163ce9ed1b05d692c2941a56 | |
parent | f1708be741dfb73ceaffb633b44093f2cb2b3d57 (diff) | |
download | opie-3c2e23bacf25fc73d51bfa98a3b2ea9c0890d540.zip opie-3c2e23bacf25fc73d51bfa98a3b2ea9c0890d540.tar.gz opie-3c2e23bacf25fc73d51bfa98a3b2ea9c0890d540.tar.bz2 |
Don't lock up with Qt2.3.8
-rw-r--r-- | library/qpeapplication.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp index 5d05ed5..3370264 100644 --- a/library/qpeapplication.cpp +++ b/library/qpeapplication.cpp | |||
@@ -933,129 +933,129 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e ) | |||
933 | mapToDefaultAction( ke, Qt::Key_Space ); | 933 | mapToDefaultAction( ke, Qt::Key_Space ); |
934 | } | 934 | } |
935 | else if ( ke->simpleData.keycode == Qt::Key_Escape && | 935 | else if ( ke->simpleData.keycode == Qt::Key_Escape && |
936 | ke->simpleData.is_press ) { | 936 | ke->simpleData.is_press ) { |
937 | // Escape key closes app if focus on toplevel | 937 | // Escape key closes app if focus on toplevel |
938 | QWidget * active = activeWindow(); | 938 | QWidget * active = activeWindow(); |
939 | if ( active && active->testWFlags( WType_TopLevel ) && | 939 | if ( active && active->testWFlags( WType_TopLevel ) && |
940 | ( int ) active->winId() == ke->simpleData.window && | 940 | ( int ) active->winId() == ke->simpleData.window && |
941 | !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { | 941 | !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { |
942 | if ( active->inherits( "QDialog" ) ) { | 942 | if ( active->inherits( "QDialog" ) ) { |
943 | HackDialog * d = ( HackDialog * ) active; | 943 | HackDialog * d = ( HackDialog * ) active; |
944 | d->rejectIt(); | 944 | d->rejectIt(); |
945 | return TRUE; | 945 | return TRUE; |
946 | } | 946 | } |
947 | else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { | 947 | else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { |
948 | active->close(); | 948 | active->close(); |
949 | } | 949 | } |
950 | } | 950 | } |
951 | } | 951 | } |
952 | else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { | 952 | else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { |
953 | // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) | 953 | // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) |
954 | // but we cannot access libopie function within libqpe :( | 954 | // but we cannot access libopie function within libqpe :( |
955 | 955 | ||
956 | QWidget * active = activeWindow ( ); | 956 | QWidget * active = activeWindow ( ); |
957 | if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { | 957 | if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { |
958 | if ( d-> kbgrabbed ) { // we grabbed the keyboard | 958 | if ( d-> kbgrabbed ) { // we grabbed the keyboard |
959 | QChar ch ( ke-> simpleData.unicode ); | 959 | QChar ch ( ke-> simpleData.unicode ); |
960 | QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, | 960 | QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, |
961 | ke-> simpleData.keycode, | 961 | ke-> simpleData.keycode, |
962 | ch. latin1 ( ), | 962 | ch. latin1 ( ), |
963 | ke-> simpleData.modifiers, | 963 | ke-> simpleData.modifiers, |
964 | QString ( ch ), | 964 | QString ( ch ), |
965 | ke-> simpleData.is_auto_repeat, 1 ); | 965 | ke-> simpleData.is_auto_repeat, 1 ); |
966 | 966 | ||
967 | QObject *which = QWidget::keyboardGrabber ( ); | 967 | QObject *which = QWidget::keyboardGrabber ( ); |
968 | if ( !which ) | 968 | if ( !which ) |
969 | which = QApplication::focusWidget ( ); | 969 | which = QApplication::focusWidget ( ); |
970 | if ( !which ) | 970 | if ( !which ) |
971 | which = QApplication::activeWindow ( ); | 971 | which = QApplication::activeWindow ( ); |
972 | if ( !which ) | 972 | if ( !which ) |
973 | which = qApp; | 973 | which = qApp; |
974 | 974 | ||
975 | QApplication::sendEvent ( which, &qke ); | 975 | QApplication::sendEvent ( which, &qke ); |
976 | } | 976 | } |
977 | else { // we didn't grab the keyboard, so send the event to the launcher | 977 | else { // we didn't grab the keyboard, so send the event to the launcher |
978 | QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); | 978 | QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); |
979 | e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat ); | 979 | e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat ); |
980 | } | 980 | } |
981 | } | 981 | } |
982 | return true; | 982 | return true; |
983 | } | 983 | } |
984 | } | 984 | } |
985 | if ( e->type == QWSEvent::Focus ) { | 985 | if ( e->type == QWSEvent::Focus ) { |
986 | QWSFocusEvent * fe = ( QWSFocusEvent* ) e; | 986 | QWSFocusEvent * fe = ( QWSFocusEvent* ) e; |
987 | if ( !fe->simpleData.get_focus ) { | 987 | if ( !fe->simpleData.get_focus ) { |
988 | QWidget * active = activeWindow(); | 988 | QWidget * active = activeWindow(); |
989 | while ( active && active->isPopup() ) { | 989 | while ( active && active->isPopup() ) { |
990 | active->close(); | 990 | active->close(); |
991 | active = activeWindow(); | 991 | active = activeWindow(); |
992 | } | 992 | } |
993 | } | 993 | } |
994 | else { | 994 | else { |
995 | // make sure our modal widget is ALWAYS on top | 995 | // make sure our modal widget is ALWAYS on top |
996 | QWidget *topm = activeModalWidget(); | 996 | QWidget *topm = activeModalWidget(); |
997 | if ( topm ) { | 997 | if ( topm && static_cast<int>( topm->winId() ) != fe->simpleData.window) { |
998 | topm->raise(); | 998 | topm->raise(); |
999 | } | 999 | } |
1000 | } | 1000 | } |
1001 | if ( fe->simpleData.get_focus && inputMethodDict ) { | 1001 | if ( fe->simpleData.get_focus && inputMethodDict ) { |
1002 | InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); | 1002 | InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); |
1003 | if ( m == AlwaysOff ) | 1003 | if ( m == AlwaysOff ) |
1004 | Global::hideInputMethod(); | 1004 | Global::hideInputMethod(); |
1005 | if ( m == AlwaysOn ) | 1005 | if ( m == AlwaysOn ) |
1006 | Global::showInputMethod(); | 1006 | Global::showInputMethod(); |
1007 | } | 1007 | } |
1008 | } | 1008 | } |
1009 | 1009 | ||
1010 | 1010 | ||
1011 | return QApplication::qwsEventFilter( e ); | 1011 | return QApplication::qwsEventFilter( e ); |
1012 | } | 1012 | } |
1013 | #endif | 1013 | #endif |
1014 | 1014 | ||
1015 | /*! | 1015 | /*! |
1016 | Destroys the QPEApplication. | 1016 | Destroys the QPEApplication. |
1017 | */ | 1017 | */ |
1018 | QPEApplication::~QPEApplication() | 1018 | QPEApplication::~QPEApplication() |
1019 | { | 1019 | { |
1020 | ungrabKeyboard(); | 1020 | ungrabKeyboard(); |
1021 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) | 1021 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) |
1022 | // Need to delete QCopChannels early, since the display will | 1022 | // Need to delete QCopChannels early, since the display will |
1023 | // be gone by the time we get to ~QObject(). | 1023 | // be gone by the time we get to ~QObject(). |
1024 | delete sysChannel; | 1024 | delete sysChannel; |
1025 | delete pidChannel; | 1025 | delete pidChannel; |
1026 | #endif | 1026 | #endif |
1027 | 1027 | ||
1028 | delete d; | 1028 | delete d; |
1029 | } | 1029 | } |
1030 | 1030 | ||
1031 | /*! | 1031 | /*! |
1032 | Returns <tt>$OPIEDIR/</tt>. | 1032 | Returns <tt>$OPIEDIR/</tt>. |
1033 | */ | 1033 | */ |
1034 | QString QPEApplication::qpeDir() | 1034 | QString QPEApplication::qpeDir() |
1035 | { | 1035 | { |
1036 | const char * base = getenv( "OPIEDIR" ); | 1036 | const char * base = getenv( "OPIEDIR" ); |
1037 | if ( base ) | 1037 | if ( base ) |
1038 | return QString( base ) + "/"; | 1038 | return QString( base ) + "/"; |
1039 | 1039 | ||
1040 | return QString( "../" ); | 1040 | return QString( "../" ); |
1041 | } | 1041 | } |
1042 | 1042 | ||
1043 | /*! | 1043 | /*! |
1044 | Returns the user's current Document directory. There is a trailing "/". | 1044 | Returns the user's current Document directory. There is a trailing "/". |
1045 | .. well, it does now,, and there's no trailing '/' | 1045 | .. well, it does now,, and there's no trailing '/' |
1046 | */ | 1046 | */ |
1047 | QString QPEApplication::documentDir() | 1047 | QString QPEApplication::documentDir() |
1048 | { | 1048 | { |
1049 | const char* base = getenv( "HOME"); | 1049 | const char* base = getenv( "HOME"); |
1050 | if ( base ) | 1050 | if ( base ) |
1051 | return QString( base ) + "/Documents"; | 1051 | return QString( base ) + "/Documents"; |
1052 | 1052 | ||
1053 | return QString( "../Documents" ); | 1053 | return QString( "../Documents" ); |
1054 | } | 1054 | } |
1055 | 1055 | ||
1056 | static int deforient = -1; | 1056 | static int deforient = -1; |
1057 | 1057 | ||
1058 | /*! | 1058 | /*! |
1059 | \internal | 1059 | \internal |
1060 | */ | 1060 | */ |
1061 | int QPEApplication::defaultRotation() | 1061 | int QPEApplication::defaultRotation() |
@@ -1404,129 +1404,129 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data | |||
1404 | 1404 | ||
1405 | 1405 | ||
1406 | 1406 | ||
1407 | /*! | 1407 | /*! |
1408 | \internal | 1408 | \internal |
1409 | */ | 1409 | */ |
1410 | bool QPEApplication::raiseAppropriateWindow() | 1410 | bool QPEApplication::raiseAppropriateWindow() |
1411 | { | 1411 | { |
1412 | bool r=FALSE; | 1412 | bool r=FALSE; |
1413 | 1413 | ||
1414 | // 1. Raise the main widget | 1414 | // 1. Raise the main widget |
1415 | QWidget *top = d->qpe_main_widget; | 1415 | QWidget *top = d->qpe_main_widget; |
1416 | if ( !top ) top = mainWidget(); | 1416 | if ( !top ) top = mainWidget(); |
1417 | 1417 | ||
1418 | if ( top && d->keep_running ) { | 1418 | if ( top && d->keep_running ) { |
1419 | if ( top->isVisible() ) | 1419 | if ( top->isVisible() ) |
1420 | r = TRUE; | 1420 | r = TRUE; |
1421 | else if (d->preloaded) { | 1421 | else if (d->preloaded) { |
1422 | // We are preloaded and not visible.. pretend we just started.. | 1422 | // We are preloaded and not visible.. pretend we just started.. |
1423 | #ifndef QT_NO_COP | 1423 | #ifndef QT_NO_COP |
1424 | QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); | 1424 | QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); |
1425 | e << d->appName; | 1425 | e << d->appName; |
1426 | #endif | 1426 | #endif |
1427 | } | 1427 | } |
1428 | 1428 | ||
1429 | d->show_mx(top,d->nomaximize, d->appName); | 1429 | d->show_mx(top,d->nomaximize, d->appName); |
1430 | top->raise(); | 1430 | top->raise(); |
1431 | } | 1431 | } |
1432 | 1432 | ||
1433 | QWidget *topm = activeModalWidget(); | 1433 | QWidget *topm = activeModalWidget(); |
1434 | 1434 | ||
1435 | // 2. Raise any parentless widgets (except top and topm, as they | 1435 | // 2. Raise any parentless widgets (except top and topm, as they |
1436 | // are raised before and after this loop). Order from most | 1436 | // are raised before and after this loop). Order from most |
1437 | // recently raised as deepest to least recently as top, so | 1437 | // recently raised as deepest to least recently as top, so |
1438 | // that repeated calls cycle through widgets. | 1438 | // that repeated calls cycle through widgets. |
1439 | QWidgetList *list = topLevelWidgets(); | 1439 | QWidgetList *list = topLevelWidgets(); |
1440 | if ( list ) { | 1440 | if ( list ) { |
1441 | bool foundlast = FALSE; | 1441 | bool foundlast = FALSE; |
1442 | QWidget* topsub = 0; | 1442 | QWidget* topsub = 0; |
1443 | if ( d->lastraised ) { | 1443 | if ( d->lastraised ) { |
1444 | for (QWidget* w = list->first(); w; w = list->next()) { | 1444 | for (QWidget* w = list->first(); w; w = list->next()) { |
1445 | if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { | 1445 | if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { |
1446 | if ( w == d->lastraised ) | 1446 | if ( w == d->lastraised ) |
1447 | foundlast = TRUE; | 1447 | foundlast = TRUE; |
1448 | if ( foundlast ) { | 1448 | if ( foundlast ) { |
1449 | w->raise(); | 1449 | w->raise(); |
1450 | topsub = w; | 1450 | topsub = w; |
1451 | } | 1451 | } |
1452 | } | 1452 | } |
1453 | } | 1453 | } |
1454 | } | 1454 | } |
1455 | for (QWidget* w = list->first(); w; w = list->next()) { | 1455 | for (QWidget* w = list->first(); w; w = list->next()) { |
1456 | if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { | 1456 | if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { |
1457 | if ( w == d->lastraised ) | 1457 | if ( w == d->lastraised ) |
1458 | break; | 1458 | break; |
1459 | w->raise(); | 1459 | w->raise(); |
1460 | topsub = w; | 1460 | topsub = w; |
1461 | } | 1461 | } |
1462 | } | 1462 | } |
1463 | d->lastraised = topsub; | 1463 | d->lastraised = topsub; |
1464 | delete list; | 1464 | delete list; |
1465 | } | 1465 | } |
1466 | 1466 | ||
1467 | // 3. Raise the active modal widget. | 1467 | // 3. Raise the active modal widget. |
1468 | if ( topm && topm != top ) { | 1468 | if ( topm ) { |
1469 | topm->show(); | 1469 | topm->show(); |
1470 | topm->raise(); | 1470 | topm->raise(); |
1471 | // If we haven't already handled the fastAppShowing message | 1471 | // If we haven't already handled the fastAppShowing message |
1472 | if (!top && d->preloaded) { | 1472 | if (!top && d->preloaded) { |
1473 | #ifndef QT_NO_COP | 1473 | #ifndef QT_NO_COP |
1474 | QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); | 1474 | QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); |
1475 | e << d->appName; | 1475 | e << d->appName; |
1476 | #endif | 1476 | #endif |
1477 | } | 1477 | } |
1478 | r = FALSE; | 1478 | r = FALSE; |
1479 | } | 1479 | } |
1480 | 1480 | ||
1481 | return r; | 1481 | return r; |
1482 | } | 1482 | } |
1483 | 1483 | ||
1484 | 1484 | ||
1485 | void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) | 1485 | void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) |
1486 | { | 1486 | { |
1487 | #ifdef Q_WS_QWS | 1487 | #ifdef Q_WS_QWS |
1488 | 1488 | ||
1489 | if ( msg == "quit()" ) { | 1489 | if ( msg == "quit()" ) { |
1490 | tryQuit(); | 1490 | tryQuit(); |
1491 | } | 1491 | } |
1492 | else if ( msg == "quitIfInvisible()" ) { | 1492 | else if ( msg == "quitIfInvisible()" ) { |
1493 | if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) | 1493 | if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) |
1494 | quit(); | 1494 | quit(); |
1495 | } | 1495 | } |
1496 | else if ( msg == "close()" ) { | 1496 | else if ( msg == "close()" ) { |
1497 | hideOrQuit(); | 1497 | hideOrQuit(); |
1498 | } | 1498 | } |
1499 | else if ( msg == "disablePreload()" ) { | 1499 | else if ( msg == "disablePreload()" ) { |
1500 | d->preloaded = FALSE; | 1500 | d->preloaded = FALSE; |
1501 | d->keep_running = TRUE; | 1501 | d->keep_running = TRUE; |
1502 | /* so that quit will quit */ | 1502 | /* so that quit will quit */ |
1503 | } | 1503 | } |
1504 | else if ( msg == "enablePreload()" ) { | 1504 | else if ( msg == "enablePreload()" ) { |
1505 | if (d->qpe_main_widget) | 1505 | if (d->qpe_main_widget) |
1506 | d->preloaded = TRUE; | 1506 | d->preloaded = TRUE; |
1507 | d->keep_running = TRUE; | 1507 | d->keep_running = TRUE; |
1508 | /* so next quit won't quit */ | 1508 | /* so next quit won't quit */ |
1509 | } | 1509 | } |
1510 | else if ( msg == "raise()" ) { | 1510 | else if ( msg == "raise()" ) { |
1511 | d->keep_running = TRUE; | 1511 | d->keep_running = TRUE; |
1512 | d->notbusysent = FALSE; | 1512 | d->notbusysent = FALSE; |
1513 | raiseAppropriateWindow(); | 1513 | raiseAppropriateWindow(); |
1514 | // Tell the system we're still chugging along... | 1514 | // Tell the system we're still chugging along... |
1515 | QCopEnvelope e("QPE/System", "appRaised(QString)"); | 1515 | QCopEnvelope e("QPE/System", "appRaised(QString)"); |
1516 | e << d->appName; | 1516 | e << d->appName; |
1517 | } | 1517 | } |
1518 | else if ( msg == "flush()" ) { | 1518 | else if ( msg == "flush()" ) { |
1519 | emit flush(); | 1519 | emit flush(); |
1520 | // we need to tell the desktop | 1520 | // we need to tell the desktop |
1521 | QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); | 1521 | QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); |
1522 | e << d->appName; | 1522 | e << d->appName; |
1523 | } | 1523 | } |
1524 | else if ( msg == "reload()" ) { | 1524 | else if ( msg == "reload()" ) { |
1525 | emit reload(); | 1525 | emit reload(); |
1526 | } | 1526 | } |
1527 | else if ( msg == "setDocument(QString)" ) { | 1527 | else if ( msg == "setDocument(QString)" ) { |
1528 | d->keep_running = TRUE; | 1528 | d->keep_running = TRUE; |
1529 | QDataStream stream( data, IO_ReadOnly ); | 1529 | QDataStream stream( data, IO_ReadOnly ); |
1530 | QString doc; | 1530 | QString doc; |
1531 | stream >> doc; | 1531 | stream >> doc; |
1532 | QWidget *mw = mainWidget(); | 1532 | QWidget *mw = mainWidget(); |