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();
}