diff --git a/src/modules/battery/e_mod_config.c b/src/modules/battery/e_mod_config.c index 909fef168..0824ff1ce 100644 --- a/src/modules/battery/e_mod_config.c +++ b/src/modules/battery/e_mod_config.c @@ -6,6 +6,7 @@ struct _E_Config_Dialog_Data int show_alert; double poll_time; int alarm_time; + int alarm_percent; }; /* Protos */ @@ -45,8 +46,9 @@ _fill_data(E_Config_Dialog_Data *cfdata) { if (!battery_config) return; cfdata->alarm_time = battery_config->alarm; + cfdata->alarm_percent = battery_config->alarm_p; 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; else cfdata->show_alert = 0; @@ -87,10 +89,16 @@ static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { if (!battery_config) return 0; - if (cfdata->show_alert) + if (cfdata->show_alert) + { battery_config->alarm = cfdata->alarm_time; - else + battery_config->alarm_p = cfdata->alarm_percent; + } + else + { battery_config->alarm = 0; + battery_config->alarm_p = 0; + } _battery_config_updated(); e_config_save_queue(); 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:")); 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); 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:")); - 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); + 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_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; battery_config->poll_time = cfdata->poll_time; - if (cfdata->show_alert) + if (cfdata->show_alert) + { battery_config->alarm = cfdata->alarm_time; + battery_config->alarm_p = cfdata->alarm_percent; + } else + { battery_config->alarm = 0; + battery_config->alarm_p = 0; + } _battery_config_updated(); e_config_save_queue(); return 1; diff --git a/src/modules/battery/e_mod_main.c b/src/modules/battery/e_mod_main.c index ef9cdf4a0..856260243 100644 --- a/src/modules/battery/e_mod_main.c +++ b/src/modules/battery/e_mod_main.c @@ -559,6 +559,8 @@ _battery_linux_acpi_check(void) { if (((hours * 60) + minutes) <= battery_config->alarm) stat->alarm = 1; + if (bat_val <= battery_config->alarm_p) + stat->alarm = 1; } } if (level_unknown) @@ -684,6 +686,8 @@ _battery_linux_apm_check(void) { if (((hours * 60) + minutes) <= battery_config->alarm) 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)) { 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; - 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)charge / tmp; stat->level = (double)tmp / 100; @@ -883,6 +873,22 @@ _battery_linux_powerbook_check(void) stat->reading = strdup(buf); snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); 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 { @@ -1027,6 +1033,8 @@ _battery_bsd_acpi_check(void) { if (((hours * 60) + minutes) <= battery_config->alarm) stat->alarm = 1; + if (bat_val <= battery_config->alarm_p) + stat->alarm = 1; } } if (level == -1) @@ -1150,6 +1158,8 @@ _battery_bsd_apm_check(void) { if (((hours * 60) + minutes) <= battery_config->alarm) 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) stat->alarm = 1; + if (stat->level <= battery_config->alarm_p) + stat->alarm = 1; } else { @@ -1397,6 +1409,7 @@ e_modapi_init(E_Module *m) #define D conf_edd E_CONFIG_VAL(D, T, poll_time, DOUBLE); 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); if (!battery_config) @@ -1404,9 +1417,11 @@ e_modapi_init(E_Module *m) battery_config = E_NEW(Config, 1); battery_config->poll_time = 30.0; 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->alarm, 0, 60); + E_CONFIG_LIMIT(battery_config->alarm_p, 0, 100); battery_config->battery_check_mode = CHECK_NONE; battery_config->battery_prev_drain = 1; diff --git a/src/modules/battery/e_mod_main.h b/src/modules/battery/e_mod_main.h index c1bc9500e..7acf9edaf 100644 --- a/src/modules/battery/e_mod_main.h +++ b/src/modules/battery/e_mod_main.h @@ -16,7 +16,8 @@ struct _Config { /* saved * loaded config values */ double poll_time; - int alarm; + int alarm; /* Alarm on minutes remaining */ + int alarm_p; /* Alarm on percentage remaining */ /* just config state */ E_Module *module; E_Config_Dialog *config_dialog;