-rw-r--r-- | core/launcher/desktop.cpp | 101 | ||||
-rw-r--r-- | core/launcher/desktop.h | 5 |
2 files changed, 94 insertions, 12 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index d2bd8ae..4926b97 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp @@ -160,16 +160,21 @@ private: public: QPEScreenSaver() { m_disable_suspend = 100; m_enable_dim = false; m_enable_lightoff = false; m_enable_onlylcdoff = false; + m_disable_suspend_ac = 100; + m_enable_dim_ac = false; + m_enable_lightoff_ac = false; + m_enable_onlylcdoff_ac = false; + m_lcd_status = true; m_backlight_normal = -1; m_backlight_current = -1; m_backlight_forcedoff = false; // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off) ODevice::inst ( )-> setDisplayStatus ( true ); @@ -181,41 +186,57 @@ public: ODevice::inst ( ) -> setDisplayStatus ( true ); m_lcd_status = true; } setBacklightInternal ( -1 ); } bool save( int level ) { + bool onAC = ( PowerStatusManager::readStatus().acStatus() == PowerStatus::Online ); + switch ( level ) { case 0: - if ( m_disable_suspend > 0 && m_enable_dim ) { + + if ( m_disable_suspend_ac > 0 && m_enable_dim_ac && onAC ) { + if ( m_backlight_current > 1 ) + setBacklight( 1 ); // lowest non-off + } else if ( m_disable_suspend > 0 && m_enable_dim ) { if ( m_backlight_current > 1 ) setBacklightInternal ( 1 ); // lowest non-off } return true; break; case 1: - if ( m_disable_suspend > 1 && m_enable_lightoff ) { + + if ( m_disable_suspend_ac > 1 && m_enable_lightoff_ac && onAC ) { + setBacklightInternal( 0 ); // off + } else if ( m_disable_suspend > 1 && m_enable_lightoff ) { setBacklightInternal ( 0 ); // off } return true; break; case 2: - if ( m_enable_onlylcdoff ) { + if ( m_enable_onlylcdoff_ac && onAC ) { + ODevice::inst ( ) -> setDisplayStatus ( false ); + m_lcd_status = false; + return true; + } + else if ( m_enable_onlylcdoff ) { ODevice::inst ( )-> setDisplayStatus ( false ); m_lcd_status = false; return true; } else // We're going to suspend the whole machine { - if ( ( m_disable_suspend > 2 ) && - ( PowerStatusManager::readStatus().acStatus() != PowerStatus::Online ) && - ( !Network::networkOnline ( ) ) ) { + if ( ( m_disable_suspend_ac > 2 && onAC ) && ( !Network::networkOnline ( ) ) ) { + QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); + return true; + } + if ( ( m_disable_suspend > 2 ) && ( !Network::networkOnline ( ) ) ) { QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); return true; } } break; } return false; } @@ -255,16 +276,42 @@ public: m_enable_onlylcdoff = config. readNumEntry ( "LcdOffOnly", 0 ); if ( !i1 && !i2 && !i3 ) QWSServer::setScreenSaverInterval( 0 ); else QWSServer::setScreenSaverIntervals( v ); } + void setIntervalsAC( int i1, int i2, int i3 ) + { + Config config( "qpe" ); + config.setGroup( "Screensaver" ); + + int v[ 4 ]; + i1 = ssi( i1, config, "DimAC", "Interval_DimAC", 30 ); + i2 = ssi( i2, config, "LightOffAC", "Interval_LightOffAC", 20 ); + i3 = ssi( i3, config, "", "IntervalAC", 60 ); + + //qDebug("screen saver intervals: %d %d %d", i1, i2, i3); + + v [ 0 ] = QMAX( 1000 * i1, 100 ); + v [ 1 ] = QMAX( 1000 * i2, 100 ); + v [ 2 ] = QMAX( 1000 * i3, 100 ); + v [ 3 ] = 0; + m_enable_dim_ac = ( ( i1 != 0 ) ? config.readNumEntry ( "DimAC", 1 ) : false ); + m_enable_lightoff_ac = ( ( i2 != 0 ) ? config.readNumEntry ( "LightOffAC", 1 ) : false ); + m_enable_onlylcdoff_ac = config.readNumEntry ( "LcdOffOnlyAC", 0 ); + + if ( !i1 && !i2 && !i3 ) + QWSServer::setScreenSaverInterval( 0 ); + else + QWSServer::setScreenSaverIntervals( v ); + } + void setInterval ( int interval ) { setIntervals ( -1, -1, interval ); } void setMode ( int mode ) { if ( mode > m_disable_suspend ) @@ -316,16 +363,21 @@ public: } private: int m_disable_suspend; bool m_enable_dim; bool m_enable_lightoff; bool m_enable_onlylcdoff; + int m_disable_suspend_ac; + bool m_enable_dim_ac; + bool m_enable_lightoff_ac; + bool m_enable_onlylcdoff_ac; + bool m_lcd_status; int m_backlight_normal; int m_backlight_current; bool m_backlight_forcedoff; }; void DesktopApplication::switchLCD ( bool on ) @@ -345,19 +397,24 @@ void DesktopApplication::switchLCD ( bool on ) } } DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) : QPEApplication( argc, argv, appType ) { - QTimer * t = new QTimer( this ); - connect( t, SIGNAL( timeout() ), this, SLOT( psTimeout() ) ); - t->start( 10000 ); + //FIXME, need also a method for setting different timer ( changed runtime ) + m_timer = new QTimer( this ); + connect( m_timer, SIGNAL( timeout() ), this, SLOT( psTimeout() ) ); + Config cfg( "qpe" ); + cfg.setGroup( "APM" ); + m_timer->start( cfg.readNumEntry( "check_interval", 10000 ) ); + m_powerVeryLow = cfg.readNumEntry( "power_verylow", 10 ); + m_powerCritical = cfg.readNumEntry( "power_critical", 5 ); ps = new PowerStatus; pa = new DesktopPowerAlerter( 0 ); channel = new QCopChannel( "QPE/Desktop", this ); connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), this, SLOT( desktopMessage( const QCString&, const QByteArray& ) ) ); channel = new QCopChannel( "QPE/System", this ); @@ -402,36 +459,54 @@ void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & stream >> time; m_screensaver-> setInterval( time ); } else if ( msg == "setScreenSaverIntervals(int,int,int)" ) { int t1, t2, t3; stream >> t1 >> t2 >> t3; m_screensaver-> setIntervals( t1, t2, t3 ); } + else if ( msg == "setScreenSaverIntervalsAC(int,int,int)" ) { + int t1, t2, t3; + stream >> t1 >> t2 >> t3; + m_screensaver-> setIntervalsAC( t1, t2, t3 ); + } else if ( msg == "setBacklight(int)" ) { int bright; stream >> bright; m_screensaver-> setBacklight( bright ); } else if ( msg == "setScreenSaverMode(int)" ) { int mode; stream >> mode; m_screensaver-> setMode ( mode ); } + else if ( msg == "reloadPowerWarnSettings()" ) { + reloadPowerWarnSettings(); + } else if ( msg == "setDisplayState(int)" ) { int state; stream >> state; m_screensaver-> setDisplayState ( state != 0 ); } else if ( msg == "suspend()" ) { emit power(); } } +void DesktopApplication::reloadPowerWarnSettings() { + Config cfg( "apm" ); + cfg.setGroup( "Warnings" ); + + m_timer->changeInterval( cfg.readNumEntry( "checkinterval", 10000 ) ); + m_powerVeryLow = cfg.readNumEntry( "powerverylow", 10 ); + m_powerCritical = cfg.readNumEntry( "powervcritical", 5 ); +} + + enum MemState { Unknown, VeryLow, Low, Normal } memstate = Unknown; #ifdef Q_WS_QWS bool DesktopApplication::qwsEventFilter( QWSEvent *e ) { qpedesktop->checkMemory(); if ( e->type == QWSEvent::Key ) { @@ -474,17 +549,17 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) } 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(); @@ -558,21 +633,23 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) #endif void DesktopApplication::psTimeout() { qpedesktop->checkMemory(); // in case no events are being generated *ps = PowerStatusManager::readStatus(); - if ( ( ps->batteryStatus() == PowerStatus::VeryLow ) ) { + // if ( ( ps->batteryStatus() == PowerStatus::VeryLow ) ) { + if ( ( ps->batteryPercentRemaining() == m_powerVeryLow ) ) { pa->alert( tr( "Battery is running very low." ), 6 ); } - if ( ps->batteryStatus() == PowerStatus::Critical ) { + // if ( ps->batteryStatus() == PowerStatus::Critical ) { + if ( ps->batteryPercentRemaining() == m_powerCritical ) { pa->alert( tr( "Battery level is critical!\n" "Keep power off until power restored!" ), 1 ); } if ( ps->backupBatteryStatus() == PowerStatus::VeryLow ) { pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 3 ); } } diff --git a/core/launcher/desktop.h b/core/launcher/desktop.h index 04c2f61..15d8ef7 100644 --- a/core/launcher/desktop.h +++ b/core/launcher/desktop.h @@ -75,21 +75,26 @@ public slots: virtual void desktopMessage ( const QCString &msg, const QByteArray &data ); virtual void systemMessage ( const QCString &msg, const QByteArray &data ); protected slots: void shutdown( ShutdownImpl::Type ); void psTimeout(); void sendCard(); private: + void reloadPowerWarnSettings(); DesktopPowerAlerter *pa; PowerStatus *ps; QTimer *cardSendTimer; QCopChannel *channel; QPEScreenSaver *m_screensaver; + QTimer * m_timer; + int m_powerVeryLow; + int m_powerCritical; + }; class Desktop : public QWidget { Q_OBJECT public: Desktop(); |