Source Code (Use browser search to find items of interest.)
Class Index
klaptopdaemon'laptop_daemon (./kdeutils/klaptopdaemon/laptop_daemon.h:47)
class laptop_daemon: public KUniqueApplication
{
Q_OBJECT
public:
laptop_daemon();
virtual ~laptop_daemon();
virtual int newInstance();
void setPollInterval(const int poll=60);
signals:
void signal_checkBattery();
protected:
void timerEvent(QTimerEvent *);
protected slots:
void checkBatteryNow();
void timerDone();
void dock_quit();
private:
void restart();
void haveBatteryLow(int t, const int num, const int type);
void start_monitor();
void invokeStandby();
void invokeSuspend();
void displayPixmap();
laptop_dock *dock_widget;
// Capability
bool hasAudio;
//KAudio audioServer;
// General settings
public:
int val;
int exists;
int powered;
int left;
QString noBatteryIcon;
QString chargeIcon;
QString noChargeIcon;
protected:
int triggered[2];
int oldval, oldexists, oldpowered;
int changed;
//
// power out actions
//
int power_wait[2]; // how close to the end when we trigger the action
int power_action[2]; // what to do when this action is triggered
//
// power out warnings
//
bool systemBeep[2];
bool runCommand[2];
QString runCommandPath[2];
bool playSound[2];
QString playSoundPath[2];
bool notify[2];
bool do_suspend[2];
bool do_standby[2];
int low[2];
int poll; // how often to pol
int oldTimer;
QTimer *timer;
bool docked, enabled, backoff;
unsigned long power_time;
unsigned long last_time;
int have_time;
};
klaptopdaemon'laptop_daemon::laptop_daemon() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:44)
laptop_daemon::laptop_daemon(): KUniqueApplication()
{
exists = laptop_portable::has_power_management();
backoff = 0;
triggered[0] = 0;
triggered[1] = 0;
timer = 0;
dock_widget = 0;
oldTimer = 0;
connect(this, SIGNAL(signal_checkBattery()), SLOT(checkBatteryNow()));
//hasAudio = (audioServer.serverStatus() == 0) ? true : false;
}
klaptopdaemon'laptop_daemon::~laptop_daemon() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:58)
laptop_daemon::~laptop_daemon()
{
}
klaptopdaemon'laptop_daemon::newInstance() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:62)
int laptop_daemon::newInstance()
{
restart();
return 0;
}
klaptopdaemon'laptop_daemon::restart() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:68)
void laptop_daemon::restart()
{
exists = laptop_portable::has_power_management();
if (oldTimer > 0) {
killTimer(oldTimer);
oldTimer=0;
}
if (timer) {
timer->stop();
delete timer;
timer = 0;
}
KConfig *config = new KConfig("kcmlaptoprc");
if (config == 0) {
::fprintf(stderr, "laptop_daemon: can't open kcmlaptop config files\n");
::exit(2);
}
config->setGroup("LaptopPower");
power_action[0] = config->readNumEntry("PowerSuspend", 0);
power_action[1] = config->readNumEntry("NoPowerSuspend", 1);
power_wait[0] = config->readNumEntry("PowerWait", 20);
power_wait[1] = config->readNumEntry("NoPowerWait", 5);
// General settings
config->setGroup("BatteryDefault");
poll = config->readNumEntry("Poll", 20);
docked = config->readBoolEntry("Docked", true);
enabled = config->readBoolEntry("Enable", false);
noBatteryIcon = config->readEntry("NoBatteryPixmap", "laptop_nobattery");
noChargeIcon = config->readEntry("NoChargePixmap", "laptop_nocharge");
chargeIcon = config->readEntry("ChargePixmap", "laptop_charge");
if(!enabled)
docked = 0;
int can_suspend = laptop_portable::has_suspend();
config->setGroup("BatteryLow");
low[0] = config->readNumEntry("LowVal", 15);
runCommand[0] = config->readBoolEntry("RunCommand", false);
runCommandPath[0] = config->readEntry("RunCommandPath");
playSound[0] = config->readBoolEntry("PlaySound", false);
playSoundPath[0] = config->readEntry("PlaySoundPath");
systemBeep[0] = config->readBoolEntry("SystemBeep", true);
notify[0] = config->readBoolEntry("Notify", true);
do_suspend[0] = config->readBoolEntry("Suspend", false);
do_standby[0] = config->readBoolEntry("Standby", false);
have_time = config->readNumEntry("HaveTime", 2);
if (!have_time && laptop_portable::has_battery_time())
have_time = 1;
config->setGroup("BatteryCritical");
low[1] = config->readNumEntry("LowVal", 5);
runCommand[1] = config->readBoolEntry("RunCommand", false);
runCommandPath[1] = config->readEntry("RunCommandPath");
playSound[1] = config->readBoolEntry("PlaySound", false);
playSoundPath[1] = config->readEntry("PlaySoundPath");
systemBeep[1] = config->readBoolEntry("SystemBeep", true);
notify[1] = config->readBoolEntry("Notify", (can_suspend?false:true));
do_suspend[1] = config->readBoolEntry("Suspend", (can_suspend?true:false));
do_standby[1] = config->readBoolEntry("Standby", false);
delete config;
config = 0;
//
// look for reasons NOT to run the daemon
//
if (!exists)
shutDown();
if (!enabled &&
!runCommand[0] && !playSound[0] && !systemBeep[0] && !notify[0] && !do_suspend[0] && !do_standby[0] &&
!runCommand[1] && !playSound[1] && !systemBeep[1] && !notify[1] && !do_suspend[1] && !do_standby[1] &&
power_action[0] == 0 && power_action[1] == 0) // if no reason to be running quit
shutDown();
// change the dock state if necessary
if (enabled) {
if (!dock_widget) {
dock_widget = new laptop_dock(this);
if (docked) {
//KWin::setDockWindow(dock_widget->winId());
dock_widget->show();
}
}
} else {
if (dock_widget) {
delete dock_widget;
dock_widget = 0;
}
}
last_time = time(0);
if (power_action[0] || power_action[1]) {
if (powered) {
power_time = time(0)+60*power_wait[0];
} else {
power_time = time(0)+60*power_wait[1];
}
timer = new QTimer( this );
connect( timer, SIGNAL(timeout()), this, SLOT(timerDone()) );
timer->start( 2*1000, TRUE ); // 1 seconds single-shot
} else {
timer = 0;
}
start_monitor();
}
klaptopdaemon'laptop_daemon::timerDone() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:181)
void laptop_daemon::timerDone()
{
unsigned long t = time(0);
if (t >= (last_time+120)) { // time suddenly jumped - we just powered up?
backoff = 0;
if (powered) {
power_time = t+60*power_wait[0];
} else {
power_time = t+60*power_wait[1];
}
} else
if (backoff) {
if (t >= power_time) {
backoff = 0;
if (powered) {
power_time = t+60*power_wait[0];
} else {
power_time = t+60*power_wait[1];
}
}
} else
if (laptop_portable::poll_activity()) { // still active?
if (powered) {
power_time = t+60*power_wait[0];
} else {
power_time = t+60*power_wait[1];
}
} else
if (t >= power_time) {
int val;
if (powered) {
val = power_action[0];
} else {
val = power_action[1];
}
switch (val) {
case 1:
invokeStandby();
break;
case 2:
invokeSuspend();
break;
}
backoff = 1;
power_time = t+60; // wait to give us time to get in and out of suspend prior to
// suspend
}
last_time = t;
timer->start( 2*1000, TRUE ); // 1 seconds single-shot
}
klaptopdaemon'laptop_daemon::dock_quit() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:234)
void laptop_daemon::dock_quit()
{
if (dock_widget)
delete dock_widget;
dock_widget = 0;
}
klaptopdaemon'laptop_daemon::haveBatteryLow() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:241)
void laptop_daemon::haveBatteryLow(int t, const int num, const int type)
{
displayPixmap();
// beep if we are allowed to
if (systemBeep[t]) {
kapp->beep();
}
// run a command if we have to
if (runCommand[t]) {
// make sure the command exists
if (!runCommandPath[t].isEmpty()) {
KProcess command;
command << runCommandPath[t];
command.start(KProcess::DontCare);
}
}
if (do_suspend[t])
invokeSuspend();
if (do_standby[t])
invokeStandby();
// play a sound if we have to
if (playSound[t] && hasAudio) {
// make sure something is specified
if (!playSoundPath[t].isEmpty()) {
//audioServer.play(playSoundPath[t]);
//audioServer.sync();
}
}
// notify if we must
if (notify[t]) {
KBatteryNotify notify_dlg(num, type);
notify_dlg.exec();
}
}
klaptopdaemon'laptop_daemon::checkBatteryNow() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:282)
void laptop_daemon::checkBatteryNow()
{
struct power_result p;
p = laptop_portable::poll_battery_state();
powered = p.powered;
left = p.time;
val = p.percentage;
if (timer && oldpowered != powered) {
if (powered) {
power_time = time(0)+60*power_wait[0];
} else {
power_time = time(0)+60*power_wait[1];
}
}
changed = oldpowered != powered||oldexists != exists||oldval != val;
oldpowered = powered;
oldexists = exists;
oldval = val;
if (changed)
displayPixmap();
}
klaptopdaemon'laptop_daemon::start_monitor() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:306)
void laptop_daemon::start_monitor()
{
checkBatteryNow();
displayPixmap();
oldTimer = startTimer(poll * 1000);
}
klaptopdaemon'laptop_daemon::setPollInterval() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:313)
void laptop_daemon::setPollInterval(const int interval)
{
poll = interval;
// Kill any old timers that may be running
if (oldTimer > 0) {
killTimer(oldTimer);
// Start a new timer will the specified time
oldTimer = startTimer(interval * 1000);
emit(signal_checkBattery());
}
}
klaptopdaemon'laptop_daemon::timerEvent() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:328)
void laptop_daemon::timerEvent(QTimerEvent *)
{
emit(signal_checkBattery());
}
klaptopdaemon'laptop_daemon::displayPixmap() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:351)
void laptop_daemon::displayPixmap()
{
if (have_time == 2 && exists && !powered) { // in some circumstances
KConfig *config = new KConfig("kcmlaptoprc");
config->setGroup("BatteryLow"); // we can;t figure this out 'till
have_time = (val < 0 ? 0 : 1); // the battery is not charging
config->writeEntry("HaveTime", have_time);
config->sync();
delete config;
}
if (dock_widget)
dock_widget->displayPixmap();
if (left >= 0) {
if (!triggered[0]) {
if (exists && !powered && left <= low[0]) {
triggered[0] = 1;
haveBatteryLow(0, left, 0);
}
} else {
if (!triggered[1]) {
if (exists && !powered && left <= low[1]) {
triggered[1] = 1;
haveBatteryLow(1, left, 0);
}
}
if (left > (low[1]+1))
triggered[1] = 0;
if (left > low[0])
triggered[0] = 0;
}
} else
if (have_time != 1) {
if (!triggered[0]) {
if (exists && !powered && val <= low[0]) {
triggered[0] = 1;
haveBatteryLow(0, val, 1);
}
} else {
if (!triggered[1]) {
if (exists && !powered && val <= low[1]) {
triggered[1] = 1;
haveBatteryLow(1, val, 1);
}
}
if (val > (low[1]+1))
triggered[1] = 0;
if (val > low[0])
triggered[0] = 0;
}
}
}
klaptopdaemon'laptop_daemon::invokeStandby() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:405)
void laptop_daemon::invokeStandby()
{
laptop_portable::invoke_standby();
}
klaptopdaemon'laptop_daemon::invokeSuspend() (./kdeutils/klaptopdaemon/laptop_daemon.cpp:410)
void laptop_daemon::invokeSuspend()
{
laptop_portable::invoke_suspend();
}