-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 @@ -60,2 +60,3 @@ + using namespace Opie; @@ -67,3 +68,3 @@ public: { } - QCopKeyRegister( int k, const QString &c, const QString &m ) + QCopKeyRegister( int k, const QCString &c, const QCString &m ) : keyCode( k ), channel( c ), message( m ) @@ -75,3 +76,3 @@ public: } - QString getChannel() const + QCString getChannel() const { @@ -79,3 +80,3 @@ public: } - QString getMessage() const + QCString getMessage() const { @@ -86,3 +87,3 @@ private: int keyCode; - QString channel, message; + QCString channel, message; }; @@ -191,5 +192,5 @@ DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) - 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 ( ))); @@ -199,2 +200,6 @@ DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) + 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 ( ); @@ -203,3 +208,8 @@ DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) + rereadVolumes(); + connect( qApp, SIGNAL( volumeChanged( bool ) ), this, SLOT( rereadVolumes() ) ); + apmTimeout ( ); + + grabKeyboard ( ); } @@ -209,2 +219,4 @@ DesktopApplication::~DesktopApplication() { + ungrabKeyboard ( ); + delete m_ps; @@ -238,17 +250,2 @@ 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 ) ); - } -} - @@ -289,5 +286,16 @@ void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & } + 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" ); @@ -303,31 +311,22 @@ 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 )); } @@ -335,37 +334,76 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) - 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; } @@ -373,30 +411,23 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) - 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 ) @@ -404,3 +435,3 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) } - if ( ke->simpleData.keycode == Key_CapsLock ) { + else if ( keycode == Key_CapsLock ) { if ( press ) @@ -408,13 +439,16 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) } - 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 ( ); } @@ -422,4 +456,3 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) else { - up = TRUE; - } + up = true; } @@ -432,15 +465,2 @@ 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; - } -} @@ -488,6 +508,4 @@ Desktop::Desktop() : ( void ) new IrServer( this ); - rereadVolumes(); packageSlave = new PackageSlave( this ); - connect( qApp, SIGNAL( volumeChanged( bool ) ), this, SLOT( rereadVolumes() ) ); @@ -585,24 +603,2 @@ 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(); -} @@ -627,57 +623,2 @@ 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 @@ -729,2 +670,3 @@ void Desktop::togglePower() #ifdef QWS + if ( Password::needToAuthenticate ( true ) && qt_screen ) { @@ -878,3 +820,3 @@ void Desktop::terminateServers() -void Desktop::rereadVolumes() +void DesktopApplication::rereadVolumes() { @@ -882,23 +824,17 @@ void Desktop::rereadVolumes() 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 @@ -27,2 +27,3 @@ #include <qpe/qpeapplication.h> +#include <opie/odevicebutton.h> @@ -50,2 +51,4 @@ public: + static void soundAlarm(); // only because QCop soundAlarm() is defined in QPE/TaskBar + signals: @@ -53,6 +56,3 @@ signals: void home(); - void datebook(); - void contacts(); void launch(); - void email(); void backlight(); @@ -74,4 +74,5 @@ 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(); @@ -80,3 +81,11 @@ protected slots: 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: @@ -92,2 +101,9 @@ private: 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; }; @@ -107,12 +123,3 @@ public: - void keyClick(); - void screenClick(); - static void soundAlarm(); - public slots: - void raiseDatebook(); - void raiseContacts(); - void raiseMenu(); - void raiseLauncher(); - void raiseEmail(); void execAutoStart(); @@ -124,5 +131,2 @@ public slots: void terminateServers(); - void rereadVolumes(); - - void home ( ); @@ -146,3 +150,2 @@ 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 @@ -1184,2 +1184,9 @@ void Launcher::launcherMessage( const QCString &msg, const QByteArray &data) } + 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 @@ -94,7 +94,2 @@ int initApplication( int argc, char ** argv ) - 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()) ); 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,2 +1,2 @@ -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 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 @@ -126,11 +126,2 @@ void RunningAppBar::removeTask(const AppLnk& appLnk) - // 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 @@ -247,4 +247,5 @@ void StartMenu::launch() - if ( launchMenu->isVisible() ) + if ( launchMenu-> isVisible ( )) { launchMenu->hide(); + } else { 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 @@ -282,3 +282,3 @@ void TaskBar::receive( const QCString &msg, const QByteArray &data ) } else if ( msg == "soundAlarm()" ) { - Desktop::soundAlarm(); + DesktopApplication::soundAlarm ( ); } @@ -296,2 +296,12 @@ 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 ( ); + } } |