summaryrefslogtreecommitdiff
path: root/core
authorharlekin <harlekin>2002-10-22 21:41:42 (UTC)
committer harlekin <harlekin>2002-10-22 21:41:42 (UTC)
commite4297ff151693e07313ea036de91ad3c788c5e26 (patch) (side-by-side diff)
tree564bf451b6e6319944e3e793631f93d879031c74 /core
parent4381aaf653750f4a51a816ff419be70059b2857d (diff)
downloadopie-e4297ff151693e07313ea036de91ad3c788c5e26.zip
opie-e4297ff151693e07313ea036de91ad3c788c5e26.tar.gz
opie-e4297ff151693e07313ea036de91ad3c788c5e26.tar.bz2
launcher side of the support for new light and power settings
Diffstat (limited to 'core') (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
@@ -144,236 +144,293 @@ void DesktopPowerAlerter::alert( const QString &text, int priority )
show();
}
void DesktopPowerAlerter::hideEvent( QHideEvent *e )
{
QMessageBox::hideEvent( e );
alertCount = 0;
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:
void setIntervals( int i1, int i2, int i3 )
{
Config config( "qpe" );
config.setGroup( "Screensaver" );
int v[ 4 ];
i1 = ssi( i1, config, "Dim", "Interval_Dim", 30 );
i2 = ssi( i2, config, "LightOff", "Interval_LightOff", 20 );
i3 = ssi( i3, config, "", "Interval", 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 = ( ( 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 );
}
DesktopApplication::~DesktopApplication()
{
delete ps;
delete pa;
}
@@ -386,68 +443,86 @@ void DesktopApplication::desktopMessage( const QCString &msg, const QByteArray &
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 )
{
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,
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 ) {
@@ -458,54 +533,54 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e )
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();
@@ -542,55 +617,57 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e )
QWSMouseEvent * me = ( QWSMouseEvent * ) e;
static bool up = TRUE;
if ( me->simpleData.state & LeftButton ) {
if ( up ) {
up = FALSE;
qpedesktop->screenClick();
}
}
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 ) ) {
QCopEnvelope e( "QPE/Obex", "send(QString,QString,QString)" );
QString mimetype = "text/x-vCard";
e << tr( "business card" ) << card << mimetype;
}
}
#if defined(QPE_HAVE_MEMALERTER)
QPE_MEMALERTER_IMPL
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
@@ -59,53 +59,58 @@ signals:
void power();
void symbol();
void numLockStateToggle();
void capsLockStateToggle();
void prepareForRestart();
protected:
#ifdef Q_WS_QWS
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();
void screenClick();
static void soundAlarm();
public slots:
void raiseDatebook();
void raiseContacts();
void raiseMenu();
void raiseLauncher();