diff --git a/tdecore/tdehw/tdehardwaredevices.cpp b/tdecore/tdehw/tdehardwaredevices.cpp index 7d222d6f7..7b8c0ad87 100644 --- a/tdecore/tdehw/tdehardwaredevices.cpp +++ b/tdecore/tdehw/tdehardwaredevices.cpp @@ -3073,8 +3073,11 @@ void TDEHardwareDevices::updateExistingDeviceInformation(TDEGenericDevice* exist valuesdir.setFilter(TQDir::All); TQString nodename; double bdevice_capacity = 0; + int bdevice_time_to_empty = 0; + int bdevice_time_to_full = 0; bool bdevice_has_energy = false; bool bdevice_has_time_to_empty = false; + bool bdevice_has_time_to_full = false; const TQFileInfoList *dirlist = valuesdir.entryInfoList(); if (dirlist) { TQFileInfoListIterator valuesdirit(*dirlist); @@ -3125,9 +3128,14 @@ void TDEHardwareDevices::updateExistingDeviceInformation(TDEGenericDevice* exist } else if (nodename == "time_to_empty_now") { // Convert from minutes to seconds - bdevice->internalSetTimeRemaining(line.toDouble()*60); + bdevice_time_to_empty = line.toDouble()*60; bdevice_has_time_to_empty = true; } + else if (nodename == "time_to_full_now") { + // Convert from minutes to seconds + bdevice_time_to_full = line.toDouble()*60; + bdevice_has_time_to_full = true; + } else if (nodename == "voltage_min_design") { bdevice->internalSetMinimumVoltage(line.toDouble()/1000000.0); } @@ -3146,17 +3154,25 @@ void TDEHardwareDevices::updateExistingDeviceInformation(TDEGenericDevice* exist } // Calculate time remaining - if (bdevice->dischargeRate() > 0) { - // Discharge/charge rate is in watt-hours - // Energy is in watt-hours - // Therefore, energy/rate = time in hours - // Convert to seconds... - if (bdevice->status() == TDEBatteryStatus::Charging) { + // Discharge/charge rate is in amper + // Energy is in amper-hours + // Therefore, energy/rate = time in hours + // Convert to seconds... + if (bdevice->status() == TDEBatteryStatus::Charging) { + if (!bdevice_has_time_to_full && bdevice->dischargeRate() > 0) { bdevice->internalSetTimeRemaining(((bdevice->maximumEnergy()-bdevice->energy())/bdevice->dischargeRate())*60*60); } - else if (!bdevice_has_time_to_empty) { + else { + bdevice->internalSetTimeRemaining(bdevice_time_to_full); + } + } + else { + if (!bdevice_has_time_to_empty && bdevice->dischargeRate() > 0) { bdevice->internalSetTimeRemaining((bdevice->energy()/bdevice->dischargeRate())*60*60); } + else { + bdevice->internalSetTimeRemaining(bdevice_time_to_empty); + } } }