diff --git a/src/battery/battery.c b/src/battery/battery.c index 01c809b..09c2486 100644 --- a/src/battery/battery.c +++ b/src/battery/battery.c @@ -176,7 +176,7 @@ void battery_update_text(char *dest, char *format) ? "Charging" : (battery_state.state == BATTERY_DISCHARGING) ? "Discharging" - : (battery_state.state == BATTERY_FULL || battery_state.percentage >= 100) + : (battery_state.state == BATTERY_FULL) ? "Full" : "Unknown", BATTERY_BUF_SIZE); @@ -194,8 +194,7 @@ void battery_update_text(char *dest, char *format) strnappend(dest, buf, BATTERY_BUF_SIZE); break; case 't': - if (battery_state.state == BATTERY_FULL || - (battery_state.state == BATTERY_UNKNOWN && battery_state.percentage >= 100)) { + if (battery_state.state == BATTERY_FULL) { snprintf(buf, sizeof(buf), "Full"); strnappend(dest, buf, BATTERY_BUF_SIZE); } else { diff --git a/src/battery/linux.c b/src/battery/linux.c index 4419306..640252a 100644 --- a/src/battery/linux.c +++ b/src/battery/linux.c @@ -446,6 +446,17 @@ int battery_os_update(BatteryState *state) /* AC state */ state->ac_connected = ac_connected; + if (state->state == BATTERY_UNKNOWN) { + if (ac_connected) { + if (total_rate_now == 0 && state->percentage >= 90) + state->state = BATTERY_FULL; + else + state->state = BATTERY_CHARGING; + } else { + state->state = BATTERY_DISCHARGING; + } + } + return 0; }