[Xfce4-commits] [panel-plugins/xfce4-battery-plugin] 06/07: Re-detect battery presence every 30 seconds (Bug #14930).

noreply at xfce.org noreply at xfce.org
Sun Dec 2 22:36:33 CET 2018


This is an automated email from the git hooks/post-receive script.

a   n   d   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository panel-plugins/xfce4-battery-plugin.

commit 77a9b19d49c3fd4d81d52d9e2b3c5aab51d75fb3
Author: John Lindgren <john at jlindgren.net>
Date:   Sat Dec 1 00:31:07 2018 -0500

    Re-detect battery presence every 30 seconds (Bug #14930).
---
 panel-plugin/battery.c | 107 ++++++-------------------------------------------
 1 file changed, 13 insertions(+), 94 deletions(-)

diff --git a/panel-plugin/battery.c b/panel-plugin/battery.c
index 8502407..5ed0dd2 100644
--- a/panel-plugin/battery.c
+++ b/panel-plugin/battery.c
@@ -88,8 +88,6 @@ typedef struct
     GtkWidget        *timechargealignment, *actempalignment;
     GtkWidget        *battstatus;
     int            timeoutid;    /* To update apm status */
-    int            method;
-    gboolean        flag;
     gboolean        low;
     gboolean        critical;
     t_battmon_options    options;
@@ -155,45 +153,10 @@ init_options(t_battmon_options *options)
     gdk_rgba_parse(&(options->colorC), CRITICAL_COLOR);
 }
 
-gboolean
-detect_battery_info(t_battmon *battmon)
-{
-#if defined(__OpenBSD__) || defined(__NetBSD__)
-  /* Code for OpenBSD by Joe Ammond <jra at twinight.org>. Using the same
-     procedure as for FreeBSD.
-     Made to work on NetBSD by Stefan Sperling <stsp at stsp.in-berlin.de>
-  */
-      struct apm_power_info apm;
-      int fd;
-
-      battmon->method = BM_BROKEN;
-      fd = open(APMDEVICE, O_RDONLY);
-      if (fd == -1) return FALSE;
-            if (ioctl(fd, APM_IOC_GETPOWER, &apm) == -1) {
-        close(fd);
-             return FALSE;
-    }
-      close(fd);
-      battmon->method = BM_USE_APM;
-
-      return TRUE;
-#else
-    /* Check to see if ACPI is available */
-    if(check_acpi()==0) {
-        /* ACPI detected */
-        battmon->method = BM_USE_ACPI;
-        return TRUE;
-    }
-
-    /* ACPI not detected/working */
-    battmon->method = BM_BROKEN;
-    return FALSE;
-#endif
-}
-
 static gboolean
 update_apm_status(t_battmon *battmon)
 {
+    int method=BM_BROKEN;
     int present=0, charge=0, rate=0;
     int lcapacity=0, ccapacity=0;
     gboolean fan=FALSE;
@@ -201,7 +164,7 @@ update_apm_status(t_battmon *battmon)
     static int old_state = -1, new_state = BM_MISSING;
     gchar * icon_name = NULL;
     int time_remaining=0;
-    gboolean acline;
+    gboolean acline=FALSE;
     gchar buffer[128];
     gchar *css, *color_str;
 
@@ -223,7 +186,6 @@ update_apm_status(t_battmon *battmon)
       struct apm_power_info apm;
       int fd;
 
-      battmon->method = BM_BROKEN;
       fd = open(APMDEVICE, O_RDONLY);
       if (fd == -1) return TRUE;
       if (ioctl(fd, APM_IOC_GETPOWER, &apm) == -1)
@@ -232,42 +194,15 @@ update_apm_status(t_battmon *battmon)
       charge = apm.battery_life;
       time_remaining = apm.minutes_left;
       acline = apm.ac_state ? TRUE : FALSE;
-
-      battmon->method = BM_USE_APM;
+      method = BM_USE_APM;
 
 #else
     DBG ("Updating battery status...");
 
-    if(battmon->method == BM_BROKEN) {
-      /* See if ACPI or APM support has been enabled yet */
-        if(!detect_battery_info(battmon)) return TRUE;
-        if(battmon->timeoutid != 0) g_source_remove(battmon->timeoutid);
-        /* Poll only once per minute if using ACPI due to a bug */
-#ifdef TUTTLE_UPDATES
-        /* what bug? I don't see any bug here. */
-        if(battmon->method == BM_USE_ACPI) {
-            battmon->timeoutid = g_timeout_add(60 * 1024,
-                    (GSourceFunc) update_apm_status, battmon);
-        }
-            else
-#endif
-            battmon->timeoutid = g_timeout_add(2 * 1024,
-                    (GSourceFunc) update_apm_status, battmon);
-    }
-
-    /* Show initial state if using ACPI rather than waiting a minute */
-    if(battmon->flag) {
-        g_source_remove(battmon->timeoutid);
-        /* we hit ACPI 4-5 times per poll, so polling every 2 seconds
-	 * generates ~10 interrupts per second. updating every 30 seconds
-	 * should be more than enough, and comes down to only 0.16
-	 * interrupts per second, adding significant sleep time */
-        battmon->timeoutid = g_timeout_add(30 * 1024,
-                (GSourceFunc) update_apm_status, battmon);
-    }
-
-    if(battmon->method == BM_USE_ACPI) {
+    /* Check ACPI for AC adapter and battery presence */
+    if(check_acpi() == 0) {
         int i;
+        method = BM_USE_ACPI;
         acline = read_acad_state();
         for (i=0;i<batt_count;i++) {
           if ( !read_acpi_info(i) || !read_acpi_state(i) )
@@ -278,12 +213,6 @@ update_apm_status(t_battmon *battmon)
           rate += acpistate->prate;
         }
 
-        if ( battmon->flag ) {
-          last_ccapacity = ccapacity;
-          last_lcapacity = lcapacity;
-          last_rate = rate;
-        }
-
         sum_lcapacity += lcapacity;
         sum_ccapacity += ccapacity;
         sum_rate += rate;
@@ -318,10 +247,9 @@ update_apm_status(t_battmon *battmon)
             time_remaining = 0;
 
         last_acline = acline;
-
     }
 #endif
-    battmon->flag = FALSE;
+
     DBG("method=%d, acline=%d, time_remaining=%d, charge=%d", battmon->method, acline, time_remaining, charge);
 
     charge = CLAMP (charge, 0, 100);
@@ -339,7 +267,7 @@ update_apm_status(t_battmon *battmon)
     }
 
     if(battmon->options.display_icon){
-        if((battmon->method == BM_USE_ACPI && present == 0) || (battmon->method == BM_USE_APM && charge == 0)) {
+        if((method == BM_USE_ACPI && present == 0) || (method == BM_USE_APM && charge == 0)) {
           /* battery missing */
           icon_name = g_strdup("xfce4-battery-missing");
           new_state = BM_MISSING;
@@ -401,7 +329,7 @@ update_apm_status(t_battmon *battmon)
 
     if(acline) {
         char *t;
-        if((battmon->method == BM_USE_ACPI && present == 0) || (battmon->method == BM_USE_APM && charge == 0)) {
+        if((method == BM_USE_ACPI && present == 0) || (method == BM_USE_APM && charge == 0)) {
             t=_("(No battery, AC on-line)");
         } else {
             t=(charge<99.9)?_("(Charging from AC)"):_("(AC on-line)");
@@ -496,7 +424,7 @@ update_apm_status(t_battmon *battmon)
     g_free(color_str);
 
     /* alarms */
-    if (!acline && charge <= battmon->options.low_percentage){
+    if (method != BM_BROKEN && !acline && charge <= battmon->options.low_percentage) {
         if(!battmon->critical && charge <= battmon->options.critical_percentage) {
                battmon->critical = TRUE;
 	       GtkWidget *dialog;
@@ -685,7 +613,6 @@ battmon_create(XfcePanelPlugin *plugin)
     battmon->critical = FALSE;
 
     battmon->timeoutid = 0;
-    battmon->flag = FALSE;
 
     return battmon;
 }
@@ -1482,20 +1409,12 @@ battmon_construct (XfcePanelPlugin *plugin)
 
     xfce_panel_plugin_add_action_widget (plugin, battmon->battstatus);
 
-    /* Determine what facility to use and initialize reading */
-    battmon->method = BM_BROKEN;
+    /* Read initial battery status */
     update_apm_status(battmon);
 
-    /* If neither ACPI nor APM are enabled, check for either every 60 seconds */
+    /* Update battery status every 30 seconds */
     if(battmon->timeoutid == 0)
-        battmon->timeoutid = g_timeout_add(60 * 1024, (GSourceFunc) update_apm_status, battmon);
-
-    /* Required for the percentage and tooltip to be initially displayed due to the long timeout for ACPI */
-    if(battmon->method == BM_USE_ACPI) {
-        battmon->flag = TRUE;
-        g_source_remove(battmon->timeoutid);
-        battmon->timeoutid = g_timeout_add(1000, (GSourceFunc) update_apm_status, battmon);
-    }
+        battmon->timeoutid = g_timeout_add_seconds(30, (GSourceFunc) update_apm_status, battmon);
 }
 
 /* register the plugin */

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list