-rw-r--r-- | library/qpeapplication.cpp | 117 |
1 files changed, 52 insertions, 65 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp index b26933b..e7e210a 100644 --- a/library/qpeapplication.cpp +++ b/library/qpeapplication.cpp @@ -93,7 +93,8 @@ class QPEApplicationData { public: - QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), kbgrabber( 0 ), - rightpressed( FALSE ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ), - forceshow( FALSE ), nomaximize( FALSE ), keep_running( TRUE ), qpe_main_widget( 0 ) + QPEApplicationData ( ) + : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ), + notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ), + keep_running( true ), qpe_main_widget( 0 ) { @@ -103,10 +104,8 @@ public: int presstimer; QWidget* presswidget; - int kbgrabber; - QString kbgrabber_appname; QPoint presspos; bool rightpressed : 1; - bool kbregrab : 1; + bool kbgrabbed : 1; bool notbusysent : 1; bool preloaded : 1; @@ -756,6 +755,4 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e ) } if ( e->type == QWSEvent::Key ) { - if ( d->kbgrabber == 1 ) - return TRUE; QWSKeyEvent *ke = ( QWSKeyEvent * ) e; if ( ke->simpleData.keycode == Qt::Key_F33 ) { @@ -810,16 +807,39 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e ) } } + else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { + // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) + // but we cannot access libopie function within libqpe :( -#if QT_VERSION < 231 - // Filter out the F4/Launcher key from apps - // ### The launcher key may not always be F4 on all devices - if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 ) - return TRUE; -#endif + QWidget * active = activeWindow ( ); + if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { + if ( d-> kbgrabbed ) { // we grabbed the keyboard + QChar ch ( ke-> simpleData.unicode ); + QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, + ke-> simpleData.keycode, + ch. latin1 ( ), + ke-> simpleData.modifiers, + QString ( ch ), + ke-> simpleData.is_auto_repeat, 1 ); + + QObject *which = QWidget::keyboardGrabber ( ); + if ( !which ) + which = QApplication::focusWidget ( ); + if ( !which ) + which = QApplication::activeWindow ( ); + if ( !which ) + which = qApp; + QApplication::sendEvent ( which, &qke ); + } + else { // we didn't grab the keyboard, so send the event to the launcher + QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); + e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat ); + } + } + return true; + } } if ( e->type == QWSEvent::Focus ) { QWSFocusEvent * fe = ( QWSFocusEvent* ) e; - QWidget* nfw = QWidget::find( e->window() ); if ( !fe->simpleData.get_focus ) { QWidget * active = activeWindow(); @@ -828,8 +848,4 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e ) active = activeWindow(); } - if ( !nfw && d->kbgrabber == 2 ) { - ungrabKeyboard(); - d->kbregrab = TRUE; // want kb back when we're active - } } else { @@ -839,8 +855,4 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e ) topm->raise(); } - if ( d->kbregrab ) { - grabKeyboard(); - d->kbregrab = FALSE; - } } if ( fe->simpleData.get_focus && inputMethodDict ) { @@ -1034,4 +1046,18 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data applyStyle(); } + else if ( msg == "toggleApplicationMenu()" ) { + QWidget *active = activeWindow ( ); + + if ( active ) { + QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( ); + bool oldactive = man-> isActive ( ); + + man-> setActive( !man-> isActive() ); + + if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu + QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" ); + } + } + } else if ( msg == "setDefaultRotation(int)" ) { if ( type() == GuiServer ) { @@ -1057,16 +1083,4 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data restart(); } - else if ( msg == "grabKeyboard(QString)" ) { - QString who; - stream >> who; - if ( who.isEmpty() ) - d->kbgrabber = 0; - else if ( who != d->appName ) - d->kbgrabber = 1; - else - d->kbgrabber = 2; - - d-> kbgrabber_appname = who; - } else if ( msg == "language(QString)" ) { if ( type() == GuiServer ) { @@ -1625,13 +1639,5 @@ void QPEApplication::removeSenderFromStylusDict() bool QPEApplication::keyboardGrabbed() const { - return d->kbgrabber; -} - -/*! - \internal -*/ -QString QPEApplication::keyboardGrabbedBy() const -{ - return d->kbgrabber_appname; + return d->kbgrabbed; } @@ -1643,14 +1649,5 @@ QString QPEApplication::keyboardGrabbedBy() const void QPEApplication::ungrabKeyboard() { - QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; - if ( d->kbgrabber == 2 ) { -#ifndef QT_NO_COP - QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); - e << QString::null; -#endif - - d->kbregrab = FALSE; - d->kbgrabber = 0; - } + ((QPEApplication *) qApp )-> d-> kbgrabbed = false; } @@ -1666,15 +1663,5 @@ void QPEApplication::ungrabKeyboard() void QPEApplication::grabKeyboard() { - QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; - if ( qApp->type() == QApplication::GuiServer ) - d->kbgrabber = 0; - else { -#ifndef QT_NO_COP - QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); - e << d->appName; -#endif - - d->kbgrabber = 2; // me - } + ((QPEApplication *) qApp )-> d-> kbgrabbed = true; } |