author | llornkcor <llornkcor> | 2002-06-23 20:19:27 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-06-23 20:19:27 (UTC) |
commit | e611ad323de0bc155d52704545378c948bdbadfa (patch) (side-by-side diff) | |
tree | 1f7e109526722dda80261a9ec1bfe79926f1389f | |
parent | 7b861d2f14bdb50558863354522dee7c7a9ef34d (diff) | |
download | opie-e611ad323de0bc155d52704545378c948bdbadfa.zip opie-e611ad323de0bc155d52704545378c948bdbadfa.tar.gz opie-e611ad323de0bc155d52704545378c948bdbadfa.tar.bz2 |
fix for keyboard handling under certain conditions, like when grabkeyboard is requested by a user app, so apps such as konsole will have proper keyboard input.
-rw-r--r-- | core/launcher/desktop.cpp | 58 |
1 files changed, 32 insertions, 26 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index 7662e48..24dce73 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp @@ -149,104 +149,110 @@ DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) ps = new PowerStatus; pa = new DesktopPowerAlerter( 0 ); channel = new QCopChannel( "QPE/Desktop", this ); connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(receive(const QCString&, const QByteArray&)) ); } DesktopApplication::~DesktopApplication() { delete ps; delete pa; } void DesktopApplication::receive( const QCString &msg, const QByteArray &data ) { QDataStream stream( data, IO_ReadOnly ); if (msg == "keyRegister(int key, QString channel, QString message)") { int k; QString c, m; stream >> k; stream >> c; stream >> m; qWarning("KeyRegisterReceived: %i, %s, %s", k, (const char*)c, (const char *)m ); keyRegisterList.append(QCopKeyRegister(k,c,m)); } else if (msg == "suspend()"){ emit power(); } } enum MemState { Unknown, VeryLow, Low, Normal } memstate=Unknown; #ifdef Q_WS_QWS bool DesktopApplication::qwsEventFilter( QWSEvent *e ) { qpedesktop->checkMemory(); if ( e->type == QWSEvent::Key ) { QWSKeyEvent *ke = (QWSKeyEvent *)e; if ( !loggedin && ke->simpleData.keycode != Key_F34 ) return TRUE; bool press = ke->simpleData.is_press; bool autoRepeat= ke->simpleData.is_auto_repeat; - if (!keyRegisterList.isEmpty()) - { + + /* + app that registers key/message to be sent back to the app, when it doesn't have focus, + when user presses key, unless keyboard has been requested from app. + will not send multiple repeats if user holds key + i.e. one shot + + */ + if (!keyRegisterList.isEmpty()) { KeyRegisterList::Iterator it; - for( it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) - { - if ((*it).getKeyCode() == ke->simpleData.keycode && !autoRepeat) { - if(press) qDebug("press"); else qDebug("release"); - QCopEnvelope((*it).getChannel().utf8(), (*it).getMessage().utf8()); + for( it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) { + if ((*it).getKeyCode() == ke->simpleData.keycode && !autoRepeat && !keyboardGrabbed()) { + if(press) qDebug("press"); else qDebug("release"); + QCopEnvelope((*it).getChannel().utf8(), (*it).getMessage().utf8()); } } } if ( !keyboardGrabbed() ) { if ( ke->simpleData.keycode == Key_F9 ) { if ( press ) emit datebook(); return TRUE; } if ( ke->simpleData.keycode == Key_F10 ) { if ( !press && cardSendTimer ) { emit contacts(); delete cardSendTimer; } else if ( press ) { cardSendTimer = new QTimer(); cardSendTimer->start( 2000, TRUE ); connect( cardSendTimer, SIGNAL( timeout() ), this, SLOT( sendCard() ) ); } return TRUE; } /* menu key now opens application menu/toolbar if ( ke->simpleData.keycode == Key_F11 ) { if ( press ) emit menu(); return TRUE; } */ if ( ke->simpleData.keycode == Key_F12 ) { while( activePopupWidget() ) activePopupWidget()->close(); if ( press ) emit launch(); return TRUE; } if ( ke->simpleData.keycode == Key_F13 ) { if ( press ) emit email(); return TRUE; } } if ( ke->simpleData.keycode == Key_F34 ) { if ( press ) emit power(); return TRUE; } // This was used for the iPAQ PowerButton // See main.cpp for new KeyboardFilter // // if ( ke->simpleData.keycode == Key_SysReq ) { // if ( press ) emit power(); // return TRUE; @@ -705,80 +711,80 @@ void DesktopApplication::restart() void Desktop::startTransferServer() { // start qcop bridge server qcopBridge = new QCopBridge( 4243 ); if ( !qcopBridge->ok() ) { delete qcopBridge; qcopBridge = 0; } // start transfer server transferServer = new TransferServer( 4242 ); if ( !transferServer->ok() ) { delete transferServer; transferServer = 0; } if ( !transferServer || !qcopBridge ) startTimer( 2000 ); } void Desktop::timerEvent( QTimerEvent *e ) { killTimer( e->timerId() ); startTransferServer(); } void Desktop::terminateServers() { delete transferServer; delete qcopBridge; transferServer = 0; qcopBridge = 0; } void Desktop::rereadVolumes() { Config cfg("qpe"); cfg.setGroup("Volume"); touchclick = cfg.readBoolEntry("TouchSound"); keyclick = cfg.readBoolEntry("KeySound"); alarmsound = cfg.readBoolEntry("AlarmSound"); // Config cfg("Sound"); // cfg.setGroup("System"); // touchclick = cfg.readBoolEntry("Touch"); // keyclick = cfg.readBoolEntry("Key"); } void Desktop::keyClick() { - if ( keyclick ) - ODevice::inst ( )-> keySound ( ); + if ( keyclick ) + ODevice::inst ( )-> keySound ( ); } void Desktop::screenClick() { - if ( touchclick ) - ODevice::inst ( )-> touchSound ( ); + if ( touchclick ) + ODevice::inst ( )-> touchSound ( ); } void Desktop::soundAlarm() { - if ( qpedesktop-> alarmsound ) - ODevice::inst ( )-> alarmSound ( ); + if ( qpedesktop-> alarmsound ) + ODevice::inst ( )-> alarmSound ( ); } bool Desktop::eventFilter( QObject *, QEvent *ev ) { - if ( ev-> type ( ) == QEvent::KeyPress ) { - QKeyEvent *ke = (QKeyEvent *) ev; - if ( ke-> key ( ) == Qt::Key_F11 ) { // menu key - QWidget *active = qApp-> activeWindow ( ); - - if ( active && active-> isPopup ( )) - active->close(); - - raiseMenu ( ); - return true; - } - } - return false; + if ( ev-> type ( ) == QEvent::KeyPress ) { + QKeyEvent *ke = (QKeyEvent *) ev; + if ( ke-> key ( ) == Qt::Key_F11 ) { // menu key + QWidget *active = qApp-> activeWindow ( ); + + if ( active && active-> isPopup ( )) + active->close(); + + raiseMenu ( ); + return true; + } + } + return false; } |