-diff -ur xfce4-battery-plugin-0.5.1_orig/panel-plugin/battery.c xfce4-battery-plugin-0.5.1/panel-plugin/battery.c
---- xfce4-battery-plugin-0.5.1_orig/panel-plugin/battery.c 2008-09-04 23:53:40.000000000 +0300
-+++ xfce4-battery-plugin-0.5.1/panel-plugin/battery.c 2010-03-01 15:59:38.620912872 +0200
+diff -ur xfce4-battery-plugin-0.5.1_/panel-plugin/battery.c xfce4-battery-plugin-0.5.1/panel-plugin/battery.c
+--- xfce4-battery-plugin-0.5.1_/panel-plugin/battery.c 2016-05-14 03:22:01.216877780 +0300
++++ xfce4-battery-plugin-0.5.1/panel-plugin/battery.c 2016-05-14 15:56:18.937740189 +0300
@@ -269,6 +269,7 @@
return labels_size <= plugin_size;
}
+#endif
+
+static gboolean
-+battmon_update_graph(t_battmon *battmon, int charge, int time_remaining, int acline, const char *temp)
++battmon_update_status(t_battmon *battmon, int charge, int time_remaining, int acline, const char *temp)
+{
+ gchar buffer[128];
+ gboolean fan = FALSE;
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(battmon->battstatus), charge / 100.0);
if(battmon->options.display_label){
-@@ -515,7 +525,7 @@
+@@ -481,7 +491,8 @@
+ }
+
+ gtk_widget_show((GtkWidget *)active_label);
+- g_snprintf(buffer, sizeof(buffer),"%02d:%02d ",time_remaining/60,time_remaining%60);
++ g_snprintf(buffer, sizeof(buffer), "%s%02d:%02d ",
++ acline ? "-" : "", time_remaining / 60, time_remaining % 60);
+ gtk_label_set_text(active_label,buffer);
+
+ } else {
+@@ -515,7 +526,7 @@
gtk_widget_show((GtkWidget *)battmon->acfan);
gtk_widget_show((GtkWidget *)battmon->temp);
if(acline && fan)
gtk_label_set_text(battmon->acfan,"AC FAN");
else if(acline && !fan)
-@@ -527,7 +537,7 @@
+@@ -527,9 +538,9 @@
gtk_widget_hide((GtkWidget *)battmon->acfan);
}
- temp=get_temperature();
+ //temp=get_temperature();
DBG ("Temp: %s", temp);
- if(temp)
+- if(temp)
++ if(temp && temp[0])
gtk_label_set_text(battmon->temp,temp);
-@@ -600,6 +610,49 @@
+ else {
+ gtk_label_set_text(battmon->temp,"");
+@@ -600,6 +611,84 @@
return TRUE;
}
++static gboolean
++battmon_should_update(void)
++{
++ static gboolean was_active;
++ static int counter;
++ gboolean active;
++ gboolean ret;
++ char buf[10];
++ FILE *f;
++
++ // update every 15 minutes anyway
++ if (counter++ == 0)
++ return TRUE;
++ if (counter == 15)
++ counter = 0;
++
++ // is the display off?
++ f = fopen("/sys/devices/platform/omapdss_dispc/power/runtime_status", "r");
++ if (f == NULL)
++ return TRUE;
++ buf[0] = 0;
++ fread(buf, 1, 9, f);
++ fclose(f);
++
++ ret = active = (strncmp(buf, "suspended", 9) != 0);
++ ret |= was_active; // additional read to get values of idle system
++ was_active = active;
++ return ret;
++}
++
+#define SYS_DIR "/sys/class/power_supply/bq27500-0/"
+
+static gboolean
+update_apm_status(t_battmon *battmon)
+{
-+ FILE *f;
-+ int charge = 0;
-+ int time_remaining = 0;
-+ int acline = 0;
++ static int charge;
++ static int time_remaining;
++ static int acline;
++ static char temp_s[16];
++ char buf[16] = "";
+ int temp = 0;
-+ char temp_s[16];
++ FILE *f;
+
+
-+ f = fopen(SYS_DIR "capacity", "r");
-+ if (f) {
-+ fscanf(f, "%d", &charge);
-+ fclose(f);
-+ }
++ if (battmon_should_update()) {
++ f = fopen(SYS_DIR "capacity", "r");
++ if (f) {
++ fscanf(f, "%d", &charge);
++ fclose(f);
++ }
+
-+ f = fopen(SYS_DIR "time_to_empty_now", "r");
-+ if (f) {
-+ fscanf(f, "%d", &time_remaining);
-+ fclose(f);
-+ }
++ f = fopen(SYS_DIR "status", "r");
++ if (f) {
++ fscanf(f, "%8s", buf);
++ fclose(f);
++ acline = strncmp(buf, "Charging", 8) == 0;
++ }
+
-+ f = fopen(SYS_DIR "current_now", "r");
-+ if (f) {
-+ fscanf(f, "%d", &acline);
-+ fclose(f);
-+ acline = acline < -14000 ? 0 : 1;
-+ }
++ f = fopen(acline ? SYS_DIR "time_to_full_now" : SYS_DIR "time_to_empty_now", "r");
++ if (f) {
++ fscanf(f, "%d", &time_remaining);
++ fclose(f);
++ }
+
-+ f = fopen(SYS_DIR "temp", "r");
-+ if (f) {
-+ fscanf(f, "%d", &temp);
-+ fclose(f);
-+ snprintf(temp_s, sizeof(temp_s), "%d.%d°C", temp / 10, temp % 10);
++ if (battmon->options.display_power) {
++ f = fopen(SYS_DIR "temp", "r");
++ if (f) {
++ fscanf(f, "%d", &temp);
++ fclose(f);
++ snprintf(temp_s, sizeof(temp_s), "%d.%d°C", temp / 10, temp % 10);
++ }
++ }
+ }
+
+ battmon->method = BM_USE_APM;
-+ return battmon_update_graph(battmon, charge, time_remaining / 60, acline, temp_s);
++ return battmon_update_status(battmon, charge, time_remaining / 60, acline, temp_s);
+}
+
static GdkPixbuf *