X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fbattery%2Fbattery.c;h=9124e1648ac148a0177d1a8ce7515253d7f857e1;hb=0caca7524827e38c9d076f33dc66416d189184e8;hp=b1f19130cfe178b002696375a9aeb9923944630e;hpb=c3fb0b1412112927a38b1eaca6a3b3a7a02c0088;p=chaz%2Ftint2 diff --git a/src/battery/battery.c b/src/battery/battery.c index b1f1913..9124e16 100644 --- a/src/battery/battery.c +++ b/src/battery/battery.c @@ -37,24 +37,44 @@ PangoFontDescription *bat1_font_desc=0; PangoFontDescription *bat2_font_desc=0; struct batstate battery_state; int battery_enabled; +int percentage_hide; +static timeout* battery_timeout=0; static char buf_bat_percentage[10]; static char buf_bat_time[20]; int8_t battery_low_status; +unsigned char battery_low_cmd_send; char *battery_low_cmd=0; -unsigned char battery_low_cmd_send=0; char *path_energy_now=0; char *path_energy_full=0; char *path_current_now=0; char *path_status=0; -void update_batterys() +void update_batterys(void* arg) { int i; update_battery(); - for (i=0 ; i < nb_panel ; i++) + for (i=0 ; i < nb_panel ; i++) { + if (battery_state.percentage >= percentage_hide) { + if (panel1[i].battery.area.on_screen == 1) { + panel1[i].battery.area.on_screen = 0; + // force resize on panel + panel1[i].area.resize = 1; + panel_refresh = 1; + } + continue; + } + else { + if (panel1[i].battery.area.on_screen == 0) { + panel1[i].battery.area.on_screen = 1; + // force resize on panel + panel1[i].area.resize = 1; + panel_refresh = 1; + } + } panel1[i].battery.area.resize = 1; + } } @@ -131,31 +151,45 @@ void init_battery() g_free(path1); g_free(battery_dir); - if (battery_enabled) - install_timer(0, 1000000, 5, 0, update_batterys); + if (battery_enabled && battery_timeout==0) + battery_timeout = add_timeout(10, 10000, update_batterys, 0); } void cleanup_battery() { battery_enabled = 0; - if (bat1_font_desc) + percentage_hide = 101; + battery_low_cmd_send = 0; + + if (bat1_font_desc) { pango_font_description_free(bat1_font_desc); - if (bat2_font_desc) + bat1_font_desc = 0; + } + if (bat2_font_desc) { pango_font_description_free(bat2_font_desc); - if (path_energy_now) + bat2_font_desc = 0; + } + if (path_energy_now) { g_free(path_energy_now); - if (path_energy_full) + path_energy_now = 0; + } + if (path_energy_full) { g_free(path_energy_full); - if (path_current_now) + path_energy_full = 0; + } + if (path_current_now) { g_free(path_current_now); - if (path_status) + path_current_now = 0; + } + if (path_status) { g_free(path_status); - if (battery_low_cmd) + path_status = 0; + } + if (battery_low_cmd) { g_free(battery_low_cmd); - - battery_low_cmd = path_energy_now = path_energy_full = path_current_now = path_status = 0; - bat1_font_desc = bat2_font_desc = 0; + battery_low_cmd = 0; + } } @@ -185,15 +219,15 @@ void init_battery_panel(void *p) if (panel_horizontal) { // panel horizonal => fixed height and posy - battery->area.posy = panel->area.pix.border.width + panel->area.paddingy; + battery->area.posy = panel->area.bg->border.width + panel->area.paddingy; battery->area.height = panel->area.height - (2 * battery->area.posy); } else { // panel vertical => fixed width, height, posy and posx battery->area.posy = panel->clock.area.posy + panel->clock.area.height + panel->area.paddingx; battery->area.height = (2 * battery->area.paddingxlr) + (bat_time_height + bat_percentage_height); - battery->area.posx = panel->area.pix.border.width + panel->area.paddingy; - battery->area.width = panel->area.width - (2 * panel->area.pix.border.width) - (2 * panel->area.paddingy); + battery->area.posx = panel->area.bg->border.width + panel->area.paddingy; + battery->area.width = panel->area.width - (2 * panel->area.bg->border.width) - (2 * panel->area.paddingy); } battery->bat1_posy = (battery->area.height - bat_percentage_height) / 2; @@ -211,36 +245,30 @@ void update_battery() { fp = fopen(path_status, "r"); if(fp != NULL) { - fgets(tmp, sizeof tmp, fp); + if (fgets(tmp, sizeof tmp, fp)) { + battery_state.state = BATTERY_UNKNOWN; + if(strcasecmp(tmp, "Charging\n")==0) battery_state.state = BATTERY_CHARGING; + if(strcasecmp(tmp, "Discharging\n")==0) battery_state.state = BATTERY_DISCHARGING; + if(strcasecmp(tmp, "Full\n")==0) battery_state.state = BATTERY_FULL; + } fclose(fp); } - battery_state.state = BATTERY_UNKNOWN; - if(strcasecmp(tmp, "Charging\n")==0) battery_state.state = BATTERY_CHARGING; - if(strcasecmp(tmp, "Discharging\n")==0) battery_state.state = BATTERY_DISCHARGING; - if(strcasecmp(tmp, "Full\n")==0) battery_state.state = BATTERY_FULL; - if (battery_state.state == BATTERY_DISCHARGING) { - } - else { - } fp = fopen(path_energy_now, "r"); if(fp != NULL) { - fgets(tmp, sizeof tmp, fp); - energy_now = atoi(tmp); + if (fgets(tmp, sizeof tmp, fp)) energy_now = atoi(tmp); fclose(fp); } fp = fopen(path_energy_full, "r"); if(fp != NULL) { - fgets(tmp, sizeof tmp, fp); - energy_full = atoi(tmp); + if (fgets(tmp, sizeof tmp, fp)) energy_full = atoi(tmp); fclose(fp); } fp = fopen(path_current_now, "r"); if(fp != NULL) { - fgets(tmp, sizeof tmp, fp); - current_now = atoi(tmp); + if (fgets(tmp, sizeof tmp, fp)) current_now = atoi(tmp); fclose(fp); } @@ -267,15 +295,13 @@ void update_battery() { if(energy_full > 0) new_percentage = (energy_now*100)/energy_full; - if(battery_low_status > new_percentage && battery_state.state == BATTERY_DISCHARGING && !battery_low_cmd_send) { - printf("battery low, executing: %s\n", battery_low_cmd); - if (battery_low_cmd) - system(battery_low_cmd); - battery_low_cmd_send = 1; + if(battery_low_status > new_percentage && battery_state.state == BATTERY_DISCHARGING && !battery_low_cmd_send) { + system(battery_low_cmd); // return value == -1, since we've set SIGCHLD to SIGIGN + battery_low_cmd_send = 1; + } + if(battery_low_status < new_percentage && battery_state.state == BATTERY_CHARGING && battery_low_cmd_send) { + battery_low_cmd_send = 0; } - if(battery_low_status < new_percentage && battery_state.state == BATTERY_CHARGING && battery_low_cmd_send) { - battery_low_cmd_send = 0; - } battery_state.percentage = new_percentage; @@ -286,7 +312,7 @@ void update_battery() { } -void draw_battery (void *obj, cairo_t *c, int active) +void draw_battery (void *obj, cairo_t *c) { Battery *battery = obj; PangoLayout *layout; @@ -359,13 +385,13 @@ void resize_battery(void *obj) if(percentage_width > time_width) new_width = percentage_width; else new_width = time_width; - new_width += (2*battery->area.paddingxlr) + (2*battery->area.pix.border.width); + new_width += (2*battery->area.paddingxlr) + (2*battery->area.bg->border.width); int old_width = battery->area.width; Panel *panel = ((Area*)obj)->panel; battery->area.width = new_width + 1; - battery->area.posx = panel->area.width - battery->area.width - panel->area.paddingxlr - panel->area.pix.border.width; + battery->area.posx = panel->area.width - battery->area.width - panel->area.paddingxlr - panel->area.bg->border.width; if (panel->clock.area.on_screen) battery->area.posx -= (panel->clock.area.width + panel->area.paddingx);