Allow module to fire its alarm given a percentage remaining threshold.

SVN revision: 30039
This commit is contained in:
Eric Schuele 2007-05-20 05:20:04 +00:00
parent 132e8b3022
commit 323620e492
3 changed files with 56 additions and 23 deletions

View File

@ -6,6 +6,7 @@ struct _E_Config_Dialog_Data
int show_alert; int show_alert;
double poll_time; double poll_time;
int alarm_time; int alarm_time;
int alarm_percent;
}; };
/* Protos */ /* Protos */
@ -45,8 +46,9 @@ _fill_data(E_Config_Dialog_Data *cfdata)
{ {
if (!battery_config) return; if (!battery_config) return;
cfdata->alarm_time = battery_config->alarm; cfdata->alarm_time = battery_config->alarm;
cfdata->alarm_percent = battery_config->alarm_p;
cfdata->poll_time = battery_config->poll_time; cfdata->poll_time = battery_config->poll_time;
if (cfdata->alarm_time > 0) if (cfdata->alarm_time > 0 || cfdata->alarm_percent > 0)
cfdata->show_alert = 1; cfdata->show_alert = 1;
else else
cfdata->show_alert = 0; cfdata->show_alert = 0;
@ -87,10 +89,16 @@ static int
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{ {
if (!battery_config) return 0; if (!battery_config) return 0;
if (cfdata->show_alert) if (cfdata->show_alert)
{
battery_config->alarm = cfdata->alarm_time; battery_config->alarm = cfdata->alarm_time;
else battery_config->alarm_p = cfdata->alarm_percent;
}
else
{
battery_config->alarm = 0; battery_config->alarm = 0;
battery_config->alarm_p = 0;
}
_battery_config_updated(); _battery_config_updated();
e_config_save_queue(); e_config_save_queue();
return 1; return 1;
@ -108,16 +116,19 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
ob = e_widget_label_add(evas, _("Check battery every:")); ob = e_widget_label_add(evas, _("Check battery every:"));
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 0, 1, 0); e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 0, 1, 0);
ob = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.5, 1000.0, 0.5, 0, &(cfdata->poll_time), NULL, 200); ob = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.5, 900.0, 0.5, 0, &(cfdata->poll_time), NULL, 200);
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 0, 1, 0); e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 0, 1, 0);
ob = e_widget_check_add(evas, _("Show alert when battery is low"), &(cfdata->show_alert)); ob = e_widget_check_add(evas, _("Show alert when battery is low"), &(cfdata->show_alert));
e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 0); e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 1, 0);
ob = e_widget_label_add(evas, _("Alert when battery is down to:")); ob = e_widget_label_add(evas, _("Alert when battery is down to:"));
e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 0, 1, 1); e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 0, 1, 1);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1, 60, 1, 0, NULL, &(cfdata->alarm_time), 200); ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1, 60, 1, 0, NULL, &(cfdata->alarm_time), 200);
e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 0, 1, 0);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f percent"), 1, 100, 1, 0, NULL, &(cfdata->alarm_percent), 200);
e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 0, 1, 0); e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 0, 1, 0);
e_widget_list_object_append(o, of, 1, 1, 0.5); e_widget_list_object_append(o, of, 1, 1, 0.5);
@ -129,10 +140,16 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{ {
if (!battery_config) return 0; if (!battery_config) return 0;
battery_config->poll_time = cfdata->poll_time; battery_config->poll_time = cfdata->poll_time;
if (cfdata->show_alert) if (cfdata->show_alert)
{
battery_config->alarm = cfdata->alarm_time; battery_config->alarm = cfdata->alarm_time;
battery_config->alarm_p = cfdata->alarm_percent;
}
else else
{
battery_config->alarm = 0; battery_config->alarm = 0;
battery_config->alarm_p = 0;
}
_battery_config_updated(); _battery_config_updated();
e_config_save_queue(); e_config_save_queue();
return 1; return 1;

View File

@ -559,6 +559,8 @@ _battery_linux_acpi_check(void)
{ {
if (((hours * 60) + minutes) <= battery_config->alarm) if (((hours * 60) + minutes) <= battery_config->alarm)
stat->alarm = 1; stat->alarm = 1;
if (bat_val <= battery_config->alarm_p)
stat->alarm = 1;
} }
} }
if (level_unknown) if (level_unknown)
@ -684,6 +686,8 @@ _battery_linux_apm_check(void)
{ {
if (((hours * 60) + minutes) <= battery_config->alarm) if (((hours * 60) + minutes) <= battery_config->alarm)
stat->alarm = 1; stat->alarm = 1;
if (bat_val <= battery_config->alarm_p)
stat->alarm = 1;
} }
} }
@ -859,22 +863,8 @@ _battery_linux_powerbook_check(void)
else if ((charging) || (discharging)) else if ((charging) || (discharging))
{ {
stat->has_battery = 1; stat->has_battery = 1;
if (charging)
{
stat->state = BATTERY_STATE_CHARGING;
battery_config->alarm_triggered = 0;
}
else if (discharging)
{
stat->state = BATTERY_STATE_DISCHARGING;
if (stat->level < 0.1)
{
if (((hours * 60) + minutes) <= battery_config->alarm)
stat->alarm = 1;
}
}
stat->level = (double)charge / (double)max_charge; stat->level = (double)charge / (double)max_charge;
if (stat->level > 1.0) stat->level = 1.0; if (stat->level > 1.0) stat->level = 1.0;
tmp = (double)max_charge / 100; tmp = (double)max_charge / 100;
tmp = (double)charge / tmp; tmp = (double)charge / tmp;
stat->level = (double)tmp / 100; stat->level = (double)tmp / 100;
@ -883,6 +873,22 @@ _battery_linux_powerbook_check(void)
stat->reading = strdup(buf); stat->reading = strdup(buf);
snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
stat->time = strdup(buf); stat->time = strdup(buf);
if (charging)
{
stat->state = BATTERY_STATE_CHARGING;
battery_config->alarm_triggered = 0;
}
else if (discharging)
{
stat->state = BATTERY_STATE_DISCHARGING;
if (stat->level < 0.1)
{
if (((hours * 60) + minutes) <= battery_config->alarm)
stat->alarm = 1;
if (stat->level <= battery_config->alarm_p)
stat->alarm = 1;
}
}
} }
else else
{ {
@ -1027,6 +1033,8 @@ _battery_bsd_acpi_check(void)
{ {
if (((hours * 60) + minutes) <= battery_config->alarm) if (((hours * 60) + minutes) <= battery_config->alarm)
stat->alarm = 1; stat->alarm = 1;
if (bat_val <= battery_config->alarm_p)
stat->alarm = 1;
} }
} }
if (level == -1) if (level == -1)
@ -1150,6 +1158,8 @@ _battery_bsd_apm_check(void)
{ {
if (((hours * 60) + minutes) <= battery_config->alarm) if (((hours * 60) + minutes) <= battery_config->alarm)
stat->alarm = 1; stat->alarm = 1;
if (bat_val <= battery_config->alarm_p)
stat->alarm = 1;
} }
} }
@ -1288,6 +1298,8 @@ _battery_darwin_check(void)
*/ */
if (currentval <= battery_config->alarm) if (currentval <= battery_config->alarm)
stat->alarm = 1; stat->alarm = 1;
if (stat->level <= battery_config->alarm_p)
stat->alarm = 1;
} }
else else
{ {
@ -1397,6 +1409,7 @@ e_modapi_init(E_Module *m)
#define D conf_edd #define D conf_edd
E_CONFIG_VAL(D, T, poll_time, DOUBLE); E_CONFIG_VAL(D, T, poll_time, DOUBLE);
E_CONFIG_VAL(D, T, alarm, INT); E_CONFIG_VAL(D, T, alarm, INT);
E_CONFIG_VAL(D, T, alarm_p, INT);
battery_config = e_config_domain_load("module.battery", conf_edd); battery_config = e_config_domain_load("module.battery", conf_edd);
if (!battery_config) if (!battery_config)
@ -1404,9 +1417,11 @@ e_modapi_init(E_Module *m)
battery_config = E_NEW(Config, 1); battery_config = E_NEW(Config, 1);
battery_config->poll_time = 30.0; battery_config->poll_time = 30.0;
battery_config->alarm = 30; battery_config->alarm = 30;
battery_config->alarm_p = 10;
} }
E_CONFIG_LIMIT(battery_config->poll_time, 0.5, 1000.0); E_CONFIG_LIMIT(battery_config->poll_time, 0.5, 1000.0);
E_CONFIG_LIMIT(battery_config->alarm, 0, 60); E_CONFIG_LIMIT(battery_config->alarm, 0, 60);
E_CONFIG_LIMIT(battery_config->alarm_p, 0, 100);
battery_config->battery_check_mode = CHECK_NONE; battery_config->battery_check_mode = CHECK_NONE;
battery_config->battery_prev_drain = 1; battery_config->battery_prev_drain = 1;

View File

@ -16,7 +16,8 @@ struct _Config
{ {
/* saved * loaded config values */ /* saved * loaded config values */
double poll_time; double poll_time;
int alarm; int alarm; /* Alarm on minutes remaining */
int alarm_p; /* Alarm on percentage remaining */
/* just config state */ /* just config state */
E_Module *module; E_Module *module;
E_Config_Dialog *config_dialog; E_Config_Dialog *config_dialog;