summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/desktop.cpp20
-rw-r--r--core/launcher/screensaver.cpp14
2 files changed, 17 insertions, 17 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp
index bc43475..f2e00d8 100644
--- a/core/launcher/desktop.cpp
+++ b/core/launcher/desktop.cpp
@@ -97,268 +97,268 @@ static void login( bool at_poweron )
if ( !loggedin ) {
Global::terminateBuiltin( "calibrate" );
Password::authenticate( at_poweron );
loggedin = 1;
QCopEnvelope e( "QPE/Desktop", "unlocked()" );
}
}
bool Desktop::screenLocked()
{
return loggedin == 0;
}
/*
Priority is number of alerts that are needed to pop up
alert.
*/
class DesktopPowerAlerter : public QMessageBox
{
public:
DesktopPowerAlerter( QWidget *parent, const char *name = 0 )
: QMessageBox( tr( "Battery Status" ), "Low Battery",
QMessageBox::Critical,
QMessageBox::Ok | QMessageBox::Default,
QMessageBox::NoButton, QMessageBox::NoButton,
parent, name, FALSE )
{
currentPriority = INT_MAX;
alertCount = 0;
}
void alert( const QString &text, int priority );
void hideEvent( QHideEvent * );
private:
int currentPriority;
int alertCount;
};
void DesktopPowerAlerter::alert( const QString &text, int priority )
{
alertCount++;
if ( alertCount < priority )
return ;
if ( priority > currentPriority )
return ;
currentPriority = priority;
setText( text );
show();
}
void DesktopPowerAlerter::hideEvent( QHideEvent *e )
{
QMessageBox::hideEvent( e );
alertCount = 0;
currentPriority = INT_MAX;
}
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-> setBacklight ( -3 );
}
else {
dapp-> m_screensaver-> setDisplayState ( false );
}
}
}
}
DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType )
: QPEApplication( argc, argv, appType )
{
Config cfg( "apm" );
cfg.setGroup( "Warnings" );
//cfg.readNumEntry( "checkinterval", 10000 )
m_powerVeryLow = cfg.readNumEntry( "powerverylow", 10 );
m_powerCritical = cfg.readNumEntry( "powercritical", 5 );
m_ps = new PowerStatus;
m_ps_last = new PowerStatus;
pa = new DesktopPowerAlerter( 0 );
m_timer = new QTimer( this );
connect( m_timer, SIGNAL( timeout() ), this, SLOT( apmTimeout() ) );
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& ) ) );
channel = new QCopChannel( "QPE/System", this );
connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ),
this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) );
m_screensaver = new OpieScreenSaver ( );
m_screensaver-> setInterval ( -1 );
QWSServer::setScreenSaver( m_screensaver );
apmTimeout ( );
}
DesktopApplication::~DesktopApplication()
{
delete m_ps;
delete m_ps_last;
delete pa;
}
void DesktopApplication::apmTimeout()
{
qpedesktop->checkMemory(); // in case no events are being generated
*m_ps_last = *m_ps;
*m_ps = PowerStatusManager::readStatus();
if ( m_ps-> acStatus ( ) != m_ps_last-> acStatus ( ))
m_screensaver-> powerStatusChanged ( *m_ps );
- int bat = m_ps-> batteryPercentRemaining ( );
-
- if ( m_ps_last-> batteryPercentRemaining ( ) != bat ) {
- if ( bat <= m_powerCritical )
- pa->alert( tr( "Battery level is critical!\nKeep power off until power restored!" ), 1 );
- else if ( bat <= m_powerVeryLow )
- pa->alert( tr( "Battery is running very low." ), 2 );
-
-
+ if ( m_ps-> acStatus ( ) != PowerStatus::Online ) {
+ int bat = m_ps-> batteryPercentRemaining ( );
+
+ if ( bat < m_ps_last-> batteryPercentRemaining ( )) {
+ if ( bat <= m_powerCritical )
+ pa->alert( tr( "Battery level is critical!\nKeep power off until power restored!" ), 1 );
+ else if ( bat <= m_powerVeryLow )
+ pa->alert( tr( "Battery is running very low." ), 2 );
+ }
if ( m_ps-> backupBatteryStatus ( ) == PowerStatus::VeryLow )
pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 2 );
- }
+ }
}
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 )
{
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 == "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 ) {
if ( ( *it ).getKeyCode() == ke->simpleData.keycode && !autoRepeat && !keyboardGrabbed() ) {
if ( press )
qDebug( "press" );
else
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;
}
// 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();
diff --git a/core/launcher/screensaver.cpp b/core/launcher/screensaver.cpp
index 741591e..45da9ed 100644
--- a/core/launcher/screensaver.cpp
+++ b/core/launcher/screensaver.cpp
@@ -1,270 +1,270 @@
#include "screensaver.h"
#include <qpe/config.h>
#include <qpe/power.h>
#include <qpe/network.h>
#include <opie/odevice.h>
using namespace Opie;
OpieScreenSaver::OpieScreenSaver ( )
: QObject ( 0, "screensaver" ), QWSScreenSaver ( )
{
m_disable_suspend = 100;
m_enable_dim = false;
m_enable_lightoff = false;
m_enable_suspend = false;
m_onlylcdoff = false;
m_enable_dim_ac = false;
m_enable_lightoff_ac = false;
m_enable_suspend_ac = false;
m_onlylcdoff_ac = false;
m_use_light_sensor = false;
m_backlight_sensor = -1;
::memset ( m_sensordata, 0xff, LS_Count * sizeof( m_sensordata [0] ));
m_lcd_status = true;
m_backlight_normal = -1;
m_backlight_current = -1;
m_backlight_forcedoff = false;
m_on_ac = false;
m_level = -1;
// 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 OpieScreenSaver::restore()
{
m_level = -1;
if ( !m_lcd_status ) { // We must have turned it off
ODevice::inst ( ) -> setDisplayStatus ( true );
m_lcd_status = true;
}
setBacklightInternal ( -1 );
}
bool OpieScreenSaver::save( int level )
{
m_level = level;
switch ( level ) {
case 0:
if (( m_on_ac && m_enable_dim_ac ) ||
( !m_on_ac && m_enable_dim )) {
if (( m_disable_suspend > 0 ) && ( m_backlight_current > 1 ) && !m_use_light_sensor )
setBacklightInternal ( 1 ); // lowest non-off
}
return true;
break;
case 1:
if (( m_on_ac && m_enable_lightoff_ac ) ||
( !m_on_ac && m_enable_lightoff )) {
if ( m_disable_suspend > 1 )
setBacklightInternal ( 0 ); // off
}
return true;
break;
case 2:
if (( m_on_ac && !m_enable_suspend_ac ) ||
( !m_on_ac && !m_enable_suspend )) {
return true;
}
if (( m_on_ac && m_onlylcdoff_ac ) ||
( !m_on_ac && m_onlylcdoff )) {
ODevice::inst ( ) -> setDisplayStatus ( false );
m_lcd_status = false;
return true;
}
// We're going to suspend the whole machine
if (( m_disable_suspend > 2 ) && !Network::networkOnline ( )) {
QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
return true;
}
break;
}
return false;
}
void OpieScreenSaver::setIntervals ( int i1, int i2, int i3 )
{
Config config ( "apm" );
config. setGroup ( m_on_ac ? "AC" : "Battery" );
int v[ 4 ];
if ( i1 < 0 )
- i1 = config. readNumEntry ( "Dim", 30 );
+ i1 = config. readNumEntry ( "Dim", m_on_ac ? 60 : 30 );
if ( i2 < 0 )
- i2 = config. readNumEntry ( "LightOff", 20 );
+ i2 = config. readNumEntry ( "LightOff", m_on_ac ? 120 : 20 );
if ( i3 < 0 )
- i3 = config. readNumEntry ( "Suspend", 60 );
+ i3 = config. readNumEntry ( "Suspend", m_on_ac ? 0 : 60 );
if ( m_on_ac ) {
m_enable_dim_ac = ( i1 > 0 );
m_enable_lightoff_ac = ( i2 > 0 );
m_enable_suspend_ac = ( i3 > 0 );
- m_onlylcdoff_ac = config.readNumEntry ( "LcdOffOnly", 0 );
+ m_onlylcdoff_ac = config.readBoolEntry ( "LcdOffOnly", false );
}
else {
m_enable_dim = ( i1 > 0 );
m_enable_lightoff = ( i2 > 0 );
m_enable_suspend = ( i3 > 0 );
- m_onlylcdoff = config.readNumEntry ( "LcdOffOnly", 0 );
+ m_onlylcdoff = config.readBoolEntry ( "LcdOffOnly", false );
}
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;
if ( !i1 && !i2 && !i3 )
QWSServer::setScreenSaverInterval( 0 );
else
QWSServer::setScreenSaverIntervals( v );
}
void OpieScreenSaver::setInterval ( int interval )
{
setIntervals ( -1, -1, interval );
}
void OpieScreenSaver::setMode ( int mode )
{
if ( mode > m_disable_suspend )
setInterval ( -1 );
m_disable_suspend = mode;
}
void OpieScreenSaver::setBacklight ( int bright )
{
// Read from config
Config config ( "apm" );
config. setGroup ( m_on_ac ? "AC" : "Battery" );
- m_backlight_normal = config. readNumEntry ( "Brightness", 255 );
+ m_backlight_normal = config. readNumEntry ( "Brightness", m_on_ac ? 255 : 127 );
m_use_light_sensor = config. readBoolEntry ( "LightSensor", false );
- qDebug ( "setBacklight: %d (ls: %d)", m_backlight_normal, m_use_light_sensor ? 1 : 0 );
+// qDebug ( "setBacklight: %d (ls: %d)", m_backlight_normal, m_use_light_sensor ? 1 : 0 );
killTimers ( );
if ( m_use_light_sensor ) {
QStringList sl = config. readListEntry ( "LightSensorData", ';' );
m_sensordata [LS_SensorMin] = 40;
m_sensordata [LS_SensorMax] = 215;
m_sensordata [LS_LightMin] = 1;
m_sensordata [LS_LightMax] = 255;
m_sensordata [LS_Steps] = 12;
m_sensordata [LS_Interval] = 2000;
for ( uint i = 0; i < LS_Count; i++ ) {
if ( i < sl. count ( ))
m_sensordata [i] = sl [i]. toInt ( );
}
timerEvent ( 0 );
startTimer ( m_sensordata [LS_Interval] );
}
setBacklightInternal ( bright );
}
void OpieScreenSaver::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_use_light_sensor ? m_backlight_sensor : m_backlight_normal;
if ( bright != m_backlight_current ) {
ODevice::inst ( )-> setDisplayBrightness ( bright );
m_backlight_current = bright;
}
}
void OpieScreenSaver::timerEvent ( QTimerEvent * )
{
int s = ODevice::inst ( )-> readLightSensor ( );
if ( s < m_sensordata [LS_SensorMin] )
m_backlight_sensor = m_sensordata [LS_LightMax];
else if ( s >= m_sensordata [LS_SensorMax] )
m_backlight_sensor = m_sensordata [LS_LightMin];
else {
int dx = m_sensordata [LS_SensorMax] - m_sensordata [LS_SensorMin];
int dy = m_sensordata [LS_LightMax] - m_sensordata [LS_LightMin];
int stepno = ( s - m_sensordata [LS_SensorMin] ) * m_sensordata [LS_Steps] / dx;
m_backlight_sensor = m_sensordata [LS_LightMax] - dy * stepno / ( m_sensordata [LS_Steps] - 1 );
}
if ( !m_backlight_sensor )
m_backlight_sensor = 1;
// qDebug ( "f(%d) = %d [%d - %d] -> [%d - %d] / %d", s, m_backlight_sensor, m_sensordata [LS_SensorMin], m_sensordata [LS_SensorMax], m_sensordata [LS_LightMin], m_sensordata [LS_LightMax], m_sensordata [LS_Steps] );
if ( m_level <= 0 )
setBacklightInternal ( -1 );
}
void OpieScreenSaver::setDisplayState ( bool on )
{
if ( m_lcd_status != on ) {
ODevice::inst ( ) -> setDisplayStatus ( on );
m_lcd_status = on;
}
}
void OpieScreenSaver::powerStatusChanged ( PowerStatus ps )
{
bool newonac = ( ps. acStatus ( ) == PowerStatus::Online );
if ( newonac != m_on_ac ) {
m_on_ac = newonac;
setInterval ( -1 );
setBacklight ( -1 );
restore ( );
}
}