-rw-r--r-- | core/launcher/desktop.cpp | 352 | ||||
-rw-r--r-- | core/launcher/desktop.h | 39 | ||||
-rw-r--r-- | core/launcher/launcher.cpp | 7 | ||||
-rw-r--r-- | core/launcher/main.cpp | 5 | ||||
-rw-r--r-- | core/launcher/opie-taskbar.control | 2 | ||||
-rw-r--r-- | core/launcher/runningappbar.cpp | 9 | ||||
-rw-r--r-- | core/launcher/startmenu.cpp | 3 | ||||
-rw-r--r-- | core/launcher/taskbar.cpp | 12 |
8 files changed, 186 insertions, 243 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index 6c67056..fa9736f 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp @@ -59,4 +59,5 @@ #include <fcntl.h> + using namespace Opie; @@ -66,5 +67,5 @@ public: QCopKeyRegister() : keyCode( 0 ) { } - QCopKeyRegister( int k, const QString &c, const QString &m ) + QCopKeyRegister( int k, const QCString &c, const QCString &m ) : keyCode( k ), channel( c ), message( m ) { } @@ -74,9 +75,9 @@ public: return keyCode; } - QString getChannel() const + QCString getChannel() const { return channel; } - QString getMessage() const + QCString getMessage() const { return message; @@ -85,5 +86,5 @@ public: private: int keyCode; - QString channel, message; + QCString channel, message; }; @@ -190,7 +191,7 @@ DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) m_timer->start( 5000 ); - channel = new QCopChannel( "QPE/Desktop", this ); - connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), - this, SLOT( desktopMessage( const QCString&, const QByteArray& ) ) ); + m_last_button = 0; + m_button_timer = new QTimer ( ); + connect ( m_button_timer, SIGNAL( timeout ( )), this, SLOT( sendHeldAction ( ))); channel = new QCopChannel( "QPE/System", this ); @@ -198,9 +199,18 @@ DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) ); + channel = new QCopChannel( "QPE/Launcher", this ); + connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), + this, SLOT( launcherMessage( const QCString&, const QByteArray& ) ) ); + m_screensaver = new OpieScreenSaver ( ); m_screensaver-> setInterval ( -1 ); QWSServer::setScreenSaver( m_screensaver ); + rereadVolumes(); + connect( qApp, SIGNAL( volumeChanged( bool ) ), this, SLOT( rereadVolumes() ) ); + apmTimeout ( ); + + grabKeyboard ( ); } @@ -208,4 +218,6 @@ DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) DesktopApplication::~DesktopApplication() { + ungrabKeyboard ( ); + delete m_ps; delete m_ps_last; @@ -237,19 +249,4 @@ void DesktopApplication::apmTimeout() } -void DesktopApplication::desktopMessage( 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 ) ); - } -} - void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data ) @@ -288,7 +285,18 @@ void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & emit power(); } + else if ( msg == "sendBusinessCard()" ) { + QString card = ::getenv ( "HOME" ); + card += "/Applications/addressbook/businesscard.vcf"; + + if ( QFile::exists( card ) ) { + QCopEnvelope e ( "QPE/Obex", "send(QString,QString,QString)" ); + QString mimetype = "text/x-vCard"; + e << tr( "business card" ) << card << mimetype; + } + } } -void DesktopApplication::reloadPowerWarnSettings() { +void DesktopApplication::reloadPowerWarnSettings() +{ Config cfg( "apm" ); cfg.setGroup( "Warnings" ); @@ -302,125 +310,150 @@ void DesktopApplication::reloadPowerWarnSettings() { enum MemState { Unknown, VeryLow, Low, Normal } memstate = Unknown; -#ifdef Q_WS_QWS -bool DesktopApplication::qwsEventFilter( QWSEvent *e ) + +void DesktopApplication::launcherMessage( const QCString & msg, const QByteArray & data ) { - qpedesktop->checkMemory(); + QDataStream stream ( data, IO_ReadOnly ); - 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 ( msg == "deviceButton(int,int,int)" ) { + int keycode, press, autoRepeat; + stream >> keycode >> press >> autoRepeat; - /* - 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() && ke->simpleData.keycode !=0 && press) { -// qDebug("<<<<<<<<<<<<<keycode %d", ke->simpleData.keycode); - KeyRegisterList::Iterator it; - 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() ); + const ODeviceButton *db = ODevice::inst ( )-> buttonForKeycode ( keycode ); + + if ( db ) + checkButtonAction ( db, keycode, press, autoRepeat ); } + else if ( msg == "keyRegister(int,QCString,QCString)" ) { + int k; + QCString c, m; + stream >> k >> c >> m; + + keyRegisterList.append ( QCopKeyRegister ( k, c, m )); } } - if ( !keyboardGrabbed() ) { - if ( ke->simpleData.keycode == Key_F9 ) { - if ( press ) - emit datebook(); - return TRUE; +void DesktopApplication::sendHeldAction ( ) +{ + if ( m_last_button ) { + m_last_button-> heldAction ( ). send ( ); + m_last_button = 0; } - 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() ) ); + + + +void DesktopApplication::checkButtonAction ( const ODeviceButton *db, int keycode, bool press, bool autoRepeat ) +{ + if ( db ) { + if ( !press && !autoRepeat && m_button_timer-> isActive ( )) { + m_button_timer-> stop ( ); + if ( !db-> pressedAction ( ). channel ( ). isEmpty ( )) { + db-> pressedAction ( ). send ( ); } - return TRUE; } + else if ( press && !autoRepeat ) { + m_button_timer-> stop ( ); - if ( ke->simpleData.keycode == Key_F11 ) { - if ( press ) emit menu(); - return TRUE; + if ( !db-> heldAction ( ). channel ( ). isEmpty ( )) { + m_last_button = db; + m_button_timer-> start ( ODevice::inst ( )-> buttonHoldTime ( ), true ); + } + } + } } - if ( ke->simpleData.keycode == Key_F12 ) { - while ( activePopupWidget() ) - activePopupWidget() ->close(); - if ( press ) - emit launch(); - return TRUE; +bool DesktopApplication::eventFilter ( QObject *o, QEvent *e ) +{ + if ( e-> type ( ) == QEvent::KeyPress || e-> type ( ) == QEvent::KeyRelease ) { + QKeyEvent *ke = (QKeyEvent *) e; + + const ODeviceButton *db = ODevice::inst ( )-> buttonForKeycode ( ke-> key ( )); + + if ( db ) { + checkButtonAction ( db, ke-> key ( ), e-> type ( ) == QEvent::KeyPress, ke-> isAutoRepeat ( )); + return true; + } + } + return QPEApplication::eventFilter ( o, e ); +} + +#ifdef Q_WS_QWS + +bool DesktopApplication::qwsEventFilter( QWSEvent *e ) +{ + qpedesktop->checkMemory(); + + if ( e->type == QWSEvent::Key ) { + QWSKeyEvent * ke = (QWSKeyEvent *) e; + ushort keycode = ke-> simpleData. keycode; + + if ( !loggedin && keycode != Key_F34 ) + return true; + + bool press = ke-> simpleData. is_press; + bool autoRepeat = ke-> simpleData. is_auto_repeat; + + if ( !keyboardGrabbed ( )) { + // 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 ( keycode != 0 && press && !autoRepeat ) { + for ( KeyRegisterList::Iterator it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) { + if (( *it ). getKeyCode ( ) == keycode ) { + QCopEnvelope (( *it ). getChannel ( ), ( *it ). getMessage ( )); + return true; + } } - if ( ke->simpleData.keycode == Key_F13 ) { - if ( press ) - emit email(); - return TRUE; } } - if ( ke->simpleData.keycode == Key_F34 ) { + if ( keycode == HardKey_Suspend ) { if ( press ) emit power(); - return TRUE; + 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; - // } - if ( ke->simpleData.keycode == Key_F35 ) { + else if ( keycode == HardKey_Backlight ) { if ( press ) emit backlight(); - return TRUE; + return true; } - if ( ke->simpleData.keycode == Key_F32 ) { + else if ( keycode == Key_F32 ) { if ( press ) QCopEnvelope e( "QPE/Desktop", "startSync()" ); - return TRUE; + return true; } - if ( ke->simpleData.keycode == Key_F31 && !ke->simpleData.modifiers ) { + else if ( keycode == Key_F31 && !ke-> simpleData. modifiers ) { // Symbol Key -> show Unicode IM if ( press ) emit symbol(); - return TRUE; + return true; } - if ( ke->simpleData.keycode == Key_NumLock ) { + else if ( keycode == Key_NumLock ) { if ( press ) emit numLockStateToggle(); } - if ( ke->simpleData.keycode == Key_CapsLock ) { + else if ( keycode == Key_CapsLock ) { if ( press ) emit capsLockStateToggle(); } - if ( ( press && !autoRepeat ) || ( !press && autoRepeat ) ) - qpedesktop->keyClick(); + if (( press && !autoRepeat ) || ( !press && autoRepeat )) { + if ( m_keyclick_sound ) + ODevice::inst ( )-> keySound ( ); } - else { - if ( e->type == QWSEvent::Mouse ) { + } + else if ( e-> type == QWSEvent::Mouse ) { QWSMouseEvent * me = ( QWSMouseEvent * ) e; - static bool up = TRUE; + static bool up = true; + if ( me->simpleData.state & LeftButton ) { if ( up ) { - up = FALSE; - qpedesktop->screenClick(); + up = false; + if ( m_screentap_sound ) + ODevice::inst ( ) -> touchSound ( ); } } else { - up = TRUE; - } + up = true; } } @@ -431,17 +464,4 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) -void DesktopApplication::sendCard() -{ - delete cardSendTimer; - cardSendTimer = 0; - QString card = getenv( "HOME" ); - card += "/Applications/addressbook/businesscard.vcf"; - - if ( QFile::exists( card ) ) { - QCopEnvelope e( "QPE/Obex", "send(QString,QString,QString)" ); - QString mimetype = "text/x-vCard"; - e << tr( "business card" ) << card << mimetype; - } -} #if defined(QPE_HAVE_MEMALERTER) @@ -487,8 +507,6 @@ Desktop::Desktop() : startTransferServer(); ( void ) new IrServer( this ); - rereadVolumes(); packageSlave = new PackageSlave( this ); - connect( qApp, SIGNAL( volumeChanged( bool ) ), this, SLOT( rereadVolumes() ) ); qApp->installEventFilter( this ); @@ -584,26 +602,4 @@ static bool hasVisibleWindow( const QString& clientname ) } -void Desktop::raiseLauncher() -{ - Config cfg( "qpe" ); //F12 'Home' - cfg.setGroup( "AppsKey" ); - QString tempItem; - tempItem = cfg.readEntry( "Middle", "Home" ); - if ( tempItem == "Home" || tempItem.isEmpty() ) { - home ( ); - } - else { - QCopEnvelope e( "QPE/System", "execute(QString)" ); - e << tempItem; - } -} - -void Desktop::home ( ) -{ - if ( isVisibleWindow( launcher->winId() ) ) - launcher->nextView(); - else - launcher->raise(); -} void Desktop::executeOrModify( const QString& appLnkFile ) @@ -626,59 +622,4 @@ void Desktop::executeOrModify( const QString& appLnkFile ) } -void Desktop::raiseDatebook() -{ - Config cfg( "qpe" ); //F9 'Activity' - cfg.setGroup( "AppsKey" ); - QString tempItem; - tempItem = cfg.readEntry( "LeftEnd" , "Calendar" ); - if ( tempItem == "Calendar" || tempItem.isEmpty() ) { - tempItem = "datebook"; - } - QCopEnvelope e( "QPE/System", "execute(QString)" ); - e << tempItem; -} - -void Desktop::raiseContacts() -{ - Config cfg( "qpe" ); //F10, 'Contacts' - cfg.setGroup( "AppsKey" ); - QString tempItem; - tempItem = cfg.readEntry( "Left2nd", "Address Book" ); - if ( tempItem == "Address Book" || tempItem.isEmpty() ) { - tempItem = "addressbook"; - } - QCopEnvelope e( "QPE/System", "execute(QString)" ); - e << tempItem; -} - -void Desktop::raiseMenu() -{ - Config cfg( "qpe" ); //F11, 'Menu - cfg.setGroup( "AppsKey" ); - QString tempItem; - tempItem = cfg.readEntry( "Right2nd" , "Popup Menu" ); - if ( tempItem == "Popup Menu" || tempItem.isEmpty() ) { - Global::terminateBuiltin( "calibrate" ); - tb->startMenu() ->launch(); - } - else { - QCopEnvelope e( "QPE/System", "execute(QString)" ); - e << tempItem; - } -} - -void Desktop::raiseEmail() -{ - Config cfg( "qpe" ); //F13, 'Mail' // only in zaurus, on ipaq mail key is F11 - cfg.setGroup( "AppsKey" ); - QString tempItem; - tempItem = cfg.readEntry( "RightEnd", "Mail" ); - if ( tempItem == "Mail" || tempItem == "qtmail" || tempItem.isEmpty() ) { - tempItem = "mail"; - } - QCopEnvelope e( "QPE/System", "execute(QString)" ); - e << tempItem; -} - // autoStarts apps on resume and start void Desktop::execAutoStart() @@ -728,4 +669,5 @@ void Desktop::togglePower() #ifdef QWS + if ( Password::needToAuthenticate ( true ) && qt_screen ) { // Should use a big black window instead. @@ -877,29 +819,23 @@ void Desktop::terminateServers() } -void Desktop::rereadVolumes() +void DesktopApplication::rereadVolumes() { Config cfg( "qpe" ); cfg.setGroup( "Volume" ); - touchclick = cfg.readBoolEntry( "TouchSound" ); - keyclick = cfg.readBoolEntry( "KeySound" ); - alarmsound = cfg.readBoolEntry( "AlarmSound" ); -} -void Desktop::keyClick() -{ - if ( keyclick ) - ODevice::inst ( ) -> keySound ( ); + m_screentap_sound = cfg. readBoolEntry ( "TouchSound" ); + m_keyclick_sound = cfg. readBoolEntry ( "KeySound" ); + m_alarm_sound = cfg. readBoolEntry ( "AlarmSound" ); } -void Desktop::screenClick() +void DesktopApplication::soundAlarm() { - if ( touchclick ) - ODevice::inst ( ) -> touchSound ( ); + if ( me ( )-> m_alarm_sound ) + ODevice::inst ( )-> alarmSound ( ); } -void Desktop::soundAlarm() +DesktopApplication *DesktopApplication::me ( ) { - if ( qpedesktop-> alarmsound ) - ODevice::inst ( ) -> alarmSound ( ); + return (DesktopApplication *) qApp; } diff --git a/core/launcher/desktop.h b/core/launcher/desktop.h index 1f8daa0..6cb7ab2 100644 --- a/core/launcher/desktop.h +++ b/core/launcher/desktop.h @@ -26,4 +26,5 @@ #include <qpe/qpeapplication.h> +#include <opie/odevicebutton.h> #include <qwidget.h> @@ -49,11 +50,10 @@ public: static void switchLCD ( bool on ); // only for togglePower in Desktop + static void soundAlarm(); // only because QCop soundAlarm() is defined in QPE/TaskBar + signals: void menu(); void home(); - void datebook(); - void contacts(); void launch(); - void email(); void backlight(); void power(); @@ -73,11 +73,20 @@ protected: public slots: - virtual void desktopMessage ( const QCString &msg, const QByteArray &data ); virtual void systemMessage ( const QCString &msg, const QByteArray &data ); + virtual void launcherMessage ( const QCString &msg, const QByteArray &data ); + void rereadVolumes(); protected slots: void shutdown( ShutdownImpl::Type ); void apmTimeout(); - void sendCard(); + void sendHeldAction ( ); + +protected: + virtual bool eventFilter ( QObject *o, QEvent *e ); + void checkButtonAction ( const Opie::ODeviceButton *db, int keycode, bool press, bool autoRepeat ); + +private: + static DesktopApplication *me ( ); + private: void reloadPowerWarnSettings(); @@ -91,4 +100,11 @@ private: int m_powerCritical; int m_currentPowerLevel; + + const Opie::ODeviceButton *m_last_button; + QTimer *m_button_timer; + + bool m_keyclick_sound : 1; + bool m_screentap_sound : 1; + bool m_alarm_sound : 1; }; @@ -106,14 +122,5 @@ public: void checkMemory(); - void keyClick(); - void screenClick(); - static void soundAlarm(); - public slots: - void raiseDatebook(); - void raiseContacts(); - void raiseMenu(); - void raiseLauncher(); - void raiseEmail(); void execAutoStart(); void togglePower(); @@ -123,7 +130,4 @@ public slots: void toggleSymbolInput(); void terminateServers(); - void rereadVolumes(); - - void home ( ); protected: @@ -145,5 +149,4 @@ private: QDateTime suspendTime; - bool keyclick, touchclick, alarmsound; }; diff --git a/core/launcher/launcher.cpp b/core/launcher/launcher.cpp index 767efb2..6764338 100644 --- a/core/launcher/launcher.cpp +++ b/core/launcher/launcher.cpp @@ -1183,4 +1183,11 @@ void Launcher::launcherMessage( const QCString &msg, const QByteArray &data) tabs->setBusyIndicatorType(type); } + else if ( msg == "home()" ) { + if ( isVisibleWindow( winId ( ))) + nextView ( ); + else + raise ( ); + + } } diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index 8b91f5d..49b41d6 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp @@ -93,9 +93,4 @@ int initApplication( int argc, char ** argv ) Desktop *d = new Desktop(); - QObject::connect( &a, SIGNAL(menu()), d, SLOT(raiseMenu()) ); - QObject::connect( &a, SIGNAL(datebook()), d, SLOT(raiseDatebook()) ); - QObject::connect( &a, SIGNAL(contacts()), d, SLOT(raiseContacts()) ); - QObject::connect( &a, SIGNAL(launch()), d, SLOT(raiseLauncher()) ); - QObject::connect( &a, SIGNAL(email()), d, SLOT(raiseEmail()) ); QObject::connect( &a, SIGNAL(power()), d, SLOT(togglePower()) ); QObject::connect( &a, SIGNAL(backlight()), d, SLOT(toggleLight()) ); diff --git a/core/launcher/opie-taskbar.control b/core/launcher/opie-taskbar.control index 13e5715..8bf2113 100644 --- a/core/launcher/opie-taskbar.control +++ b/core/launcher/opie-taskbar.control @@ -1,3 +1,3 @@ -Files: bin/qpe apps/Settings/Calibrate.desktop pics/launcher plugins/applets/libsuspendapplet.so* plugins/applets/libhomeapplet.so* plugins/applets/liblogoutapplet.so* +Files: bin/qpe apps/Settings/Calibrate.desktop pics/launcher pics/devicebuttons/*.png plugins/applets/libsuspendapplet.so* plugins/applets/libhomeapplet.so* plugins/applets/liblogoutapplet.so* Priority: required Section: opie/system diff --git a/core/launcher/runningappbar.cpp b/core/launcher/runningappbar.cpp index 3ac66f2..356200b 100644 --- a/core/launcher/runningappbar.cpp +++ b/core/launcher/runningappbar.cpp @@ -125,13 +125,4 @@ void RunningAppBar::removeTask(const AppLnk& appLnk) m_AppList.remove(); - // grab the keyboard back, in case the app crashed/forgot - - QPEApplication *qpeapp = (QPEApplication *) qApp; - - if ( appLnk.exec() == qpeapp-> keyboardGrabbedBy ( )) { - qDebug ( "grabbing keyboard back from %s", appLnk.name().latin1()); - qpeapp-> grabKeyboard ( ); - } - delete target; } diff --git a/core/launcher/startmenu.cpp b/core/launcher/startmenu.cpp index 88c6219..39e07c8 100644 --- a/core/launcher/startmenu.cpp +++ b/core/launcher/startmenu.cpp @@ -246,6 +246,7 @@ void StartMenu::launch() int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height(); - if ( launchMenu->isVisible() ) + if ( launchMenu-> isVisible ( )) { launchMenu->hide(); + } else { QWidget *active = qApp->activeWindow(); diff --git a/core/launcher/taskbar.cpp b/core/launcher/taskbar.cpp index b4b7df6..77035a3 100644 --- a/core/launcher/taskbar.cpp +++ b/core/launcher/taskbar.cpp @@ -281,5 +281,5 @@ void TaskBar::receive( const QCString &msg, const QByteArray &data ) sm->reloadApplets(); } else if ( msg == "soundAlarm()" ) { - Desktop::soundAlarm(); + DesktopApplication::soundAlarm ( ); } else if ( msg == "setLed(int,bool)" ) { @@ -295,4 +295,14 @@ void TaskBar::receive( const QCString &msg, const QByteArray &data ) } } + else if ( msg == "toggleMenu()" ) { + if ( sm-> launchMenu-> isVisible ( )) + sm-> launch ( ); + else { + QCopEnvelope e ( "QPE/System", "toggleApplicationMenu()" ); + } + } + else if ( msg == "toggleStartMenu()" ) { + sm-> launch ( ); + } } |