Fix battery selection, it appears incompatible with 0.7.2 behavior.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Thu, 24 Nov 2016 23:18:47 +0000 (01:18 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Thu, 24 Nov 2016 23:18:47 +0000 (01:18 +0200)
See https://bugs.debian.org/845555

ChangeLog
TODO
plugins/batt/batt_sys.c

index a21a14e..0abe16b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5 @@
+* Fixed battery selection, it appears incompatible with 0.7.2 behavior.
+
 0.9.1
 -------------------------------------------------------------------------
 * Fixed build failure without ALSA.
diff --git a/TODO b/TODO
index 965b17c..8d9f91f 100644 (file)
--- a/TODO
+++ b/TODO
@@ -17,7 +17,7 @@
 * decide 'netstat' vs 'netstatus'
 * optional libnotify support (useful for battery and volume plugins)
 * pull improvements from Raspbian
-* add Most Recent support into 'menu' plugin
+* add Most Recent support into 'menu' plugin (option: ones not by Run too)
 * check and use weather-* standard themed icons for weather plugin
 * "Remove this Launch Button" option in launchbar context menu
 * 'usb-unmount' plugin
index 154bd3d..2482c6f 100644 (file)
@@ -4,6 +4,7 @@
  *      Copyright 2009 Juergen Hötzel <juergen@archlinux.org>
  *                2015 Henry Gebhardt <hsggebhardt@googlemail.com>
  *                2015 Stanislav Kozina, Ersin <xersin@users.sf.net>
+ *                2016 Andriy Grytsenko <andrej@rep.kiev.ua>
  *
  *     Parts shameless stolen and glibified from acpi package
  *     Copyright (C) 2001  Grahame Bowland <grahame@angrygoats.net>
@@ -295,15 +296,8 @@ battery *battery_get(int battery_number) {
     const gchar *entry;
     gchar *batt_name = NULL;
     gchar *batt_path = NULL;
-    GDir * dir = g_dir_open( ACPI_PATH_SYS_POWER_SUPPLY, 0, &error );
+    GDir * dir;
     battery *b = NULL;
-    int i;
-
-    if ( dir == NULL )
-    {
-        g_warning( "NO ACPI/sysfs support in kernel: %s", error->message );
-        return NULL;
-    }
 
     /* Try the expected path in sysfs first */
     batt_name = g_strdup_printf(ACPI_BATTERY_DEVICE_NAME "%d", battery_number);
@@ -324,13 +318,20 @@ battery *battery_get(int battery_number) {
     g_free(batt_path);
 
     if (b != NULL)
-        goto done;
+        return b;
 
     /*
      * We didn't find the expected path in sysfs.
-     * Walk the dir and blindly return n-th entry.
+     * Walk the dir and return any battery.
      */
-    i = 0;
+    dir = g_dir_open( ACPI_PATH_SYS_POWER_SUPPLY, 0, &error );
+    if ( dir == NULL )
+    {
+        g_warning( "NO ACPI/sysfs support in kernel: %s", error->message );
+        g_error_free(error);
+        return NULL;
+    }
+
     while ( ( entry = g_dir_read_name (dir) ) != NULL )
     {
         b = battery_new();
@@ -339,9 +340,7 @@ battery *battery_get(int battery_number) {
 
         /* We're looking for a battery with the selected ID */
         if (b->type_battery == TRUE) {
-            if (i == battery_number)
-                break;
-            i++;
+            break;
         }
         battery_free(b);
         b = NULL;
@@ -349,9 +348,10 @@ battery *battery_get(int battery_number) {
     if (b != NULL)
         g_warning( "Battery entry " ACPI_BATTERY_DEVICE_NAME "%d not found, using %s",
             battery_number, b->path);
+        // FIXME: update config?
     else
         g_warning( "Battery %d not found", battery_number );
-done:
+
     g_dir_close( dir );
     return b;
 }