summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/desktop.cpp161
-rw-r--r--core/launcher/desktop.h15
2 files changed, 129 insertions, 47 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
@@ -152,85 +152,106 @@ void DesktopPowerAlerter::hideEvent( QHideEvent *e )
currentPriority = INT_MAX;
}
class QPEScreenSaver : public QWSScreenSaver
{
private:
int LcdOn;
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_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 );
setBacklight ( -1 );
}
void restore()
{
if ( !m_lcd_status ) { // We must have turned it off
ODevice::inst ( ) -> setDisplayStatus ( true );
m_lcd_status = true;
}
setBacklightInternal ( -1 );
}
bool save( int level )
{
- switch ( level ) {
+ bool onAC = ( PowerStatusManager::readStatus().acStatus() == PowerStatus::Online );
+
+ switch ( level ) {
case 0:
- if ( m_disable_suspend > 0 && m_enable_dim ) {
- if ( m_backlight_current > 1 )
- setBacklightInternal ( 1 ); // lowest non-off
- }
- return true;
- break;
+
+ 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 ) {
- setBacklightInternal ( 0 ); // off
- }
- return true;
- break;
- case 2:
- if ( m_enable_onlylcdoff ) {
- ODevice::inst ( )-> setDisplayStatus ( false );
- m_lcd_status = false;
+
+ 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;
- }
- else // We're going to suspend the whole machine
- {
- if ( ( m_disable_suspend > 2 ) &&
- ( PowerStatusManager::readStatus().acStatus() != PowerStatus::Online ) &&
- ( !Network::networkOnline ( ) ) ) {
- QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
- return true;
+ break;
+ case 2:
+ if ( m_enable_onlylcdoff_ac && onAC ) {
+ ODevice::inst ( ) -> setDisplayStatus ( false );
+ m_lcd_status = false;
+ return true;
}
- }
- break;
- }
- return false;
+ 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_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;
}
private:
static int ssi( int interval, Config & config, const QString & enable, const QString & value, int def )
{
if ( !enable.isEmpty() && config.readNumEntry( enable, 0 ) == 0 )
return 0;
if ( interval < 0 ) {
// Restore screen blanking and power saving state
interval = config.readNumEntry( value, def );
}
return interval;
}
public:
@@ -247,125 +268,161 @@ public:
//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 = ( ( i1 != 0 ) ? config. readNumEntry ( "Dim", 1 ) : false );
m_enable_lightoff = ( ( i2 != 0 ) ? config. readNumEntry ( "LightOff", 1 ) : false );
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 )
setInterval( -1 );
m_disable_suspend = mode;
}
-
+
void setBacklight ( int bright )
{
// Read from config
Config config ( "qpe" );
config. setGroup ( "Screensaver" );
m_backlight_normal = config. readNumEntry ( "Brightness", 255 );
setBacklightInternal ( bright );
}
private:
void setBacklightInternal ( int bright )
{
if ( bright == -3 ) {
// Forced on
m_backlight_forcedoff = false;
bright = -1;
}
if ( m_backlight_forcedoff && bright != -2 )
return ;
if ( bright == -2 ) {
// Toggle between off and on
bright = m_backlight_current ? 0 : -1;
m_backlight_forcedoff = !bright;
}
if ( bright == -1 )
bright = m_backlight_normal;
-
+
if ( bright != m_backlight_current ) {
ODevice::inst ( )-> setDisplayBrightness ( bright );
m_backlight_current = bright;
}
}
public:
void setDisplayState ( bool on )
{
if ( m_lcd_status != on ) {
ODevice::inst ( ) -> setDisplayStatus ( on );
m_lcd_status = on;
}
}
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 )
{
if ( qApp ) {
DesktopApplication *dapp = (DesktopApplication *) qApp;
if ( dapp-> m_screensaver ) {
if ( on ) {
- dapp-> m_screensaver-> setDisplayState ( true );
+ dapp-> m_screensaver-> setDisplayState ( true );
dapp-> m_screensaver-> setBacklight ( -3 );
}
else {
dapp-> m_screensaver-> setDisplayState ( false );
}
}
}
}
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 );
connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ),
this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) );
m_screensaver = new QPEScreenSaver;
m_screensaver-> setInterval ( -1 );
QWSServer::setScreenSaver( m_screensaver );
}
@@ -394,52 +451,70 @@ void DesktopApplication::desktopMessage( const QCString &msg, const QByteArray &
void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data )
{
QDataStream stream ( data, IO_ReadOnly );
if ( msg == "setScreenSaverInterval(int)" ) {
int time;
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 ) {
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;
/*
app that registers key/message to be sent back to the app, when it doesn't have focus,
@@ -466,38 +541,38 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e )
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 )
@@ -550,39 +625,41 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e )
else {
up = TRUE;
}
}
}
return QPEApplication::qwsEventFilter( e );
}
#endif
void DesktopApplication::psTimeout()
{
qpedesktop->checkMemory(); // in case no events are being generated
*ps = PowerStatusManager::readStatus();
- if ( ( ps->batteryStatus() == PowerStatus::VeryLow ) ) {
- pa->alert( tr( "Battery is running very low." ), 6 );
+ // if ( ( ps->batteryStatus() == PowerStatus::VeryLow ) ) {
+ if ( ( ps->batteryPercentRemaining() == m_powerVeryLow ) ) {
+ pa->alert( tr( "Battery is running very low." ), 6 );
}
- if ( ps->batteryStatus() == PowerStatus::Critical ) {
- pa->alert( tr( "Battery level is critical!\n"
- "Keep power off until power restored!" ), 1 );
+ // 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 );
}
}
void DesktopApplication::sendCard()
{
delete cardSendTimer;
cardSendTimer = 0;
QString card = getenv( "HOME" );
card += "/Applications/addressbook/businesscard.vcf";
if ( QFile::exists( card ) ) {
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
@@ -67,37 +67,42 @@ protected:
bool qwsEventFilter( QWSEvent * );
#endif
void shutdown();
void restart();
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:
- DesktopPowerAlerter *pa;
- PowerStatus *ps;
- QTimer *cardSendTimer;
- QCopChannel *channel;
- QPEScreenSaver *m_screensaver;
+ 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();
~Desktop();
static bool screenLocked();
void show();
void checkMemory();
void keyClick();