diff --git a/BatteryMeter.c b/BatteryMeter.c index 466a525a..36b90e7d 100644 --- a/BatteryMeter.c +++ b/BatteryMeter.c @@ -234,7 +234,6 @@ static double getProcBatData() { return 0; double percent = totalFull > 0 ? ((double) totalRemain * 100) / (double) totalFull : 0; - return percent; } @@ -270,8 +269,27 @@ static double getSysBatData() { return 0; } - totalFull += parseUevent(file, "POWER_SUPPLY_ENERGY_FULL="); - totalRemain += parseUevent(file, "POWER_SUPPLY_ENERGY_NOW="); + if ((totalFull += parseUevent(file, "POWER_SUPPLY_ENERGY_FULL="))) { + totalRemain += parseUevent(file, "POWER_SUPPLY_ENERGY_NOW="); + } else { + //reset file pointer + if (fseek(file, 0, SEEK_SET) < 0) { + fclose(file); + return 0; + } + } + + //Some systems have it as CHARGE instead of ENERGY. + if ((totalFull += parseUevent(file, "POWER_SUPPLY_CHARGE_FULL="))) { + totalRemain += parseUevent(file, "POWER_SUPPLY_CHARGE_NOW="); + } else { + //reset file pointer + if (fseek(file, 0, SEEK_SET) < 0) { + fclose(file); + return 0; + } + } + fclose(file); } @@ -282,6 +300,7 @@ static double getSysBatData() { static void BatteryMeter_setValues(Meter * this, char *buffer, int len) { double percent = getProcBatData(); + if (percent == 0) { percent = getSysBatData(); if (percent == 0) { diff --git a/ChangeLog b/ChangeLog index 74fa83b1..c5a86ca2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,8 @@ What's new in version 0.9 (thanks to Pavol Rusnak) * Add Bash/emacs style navigation keys (thanks to Daniel Schuler) +* Improve battery meter support + (thanks to Richard W.) * Fix IO-wait color in "Black on White" scheme What's new in version 0.8.3