summaryrefslogtreecommitdiff
path: root/community/fbpanel/battery_fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/fbpanel/battery_fix.patch')
-rw-r--r--community/fbpanel/battery_fix.patch119
1 files changed, 119 insertions, 0 deletions
diff --git a/community/fbpanel/battery_fix.patch b/community/fbpanel/battery_fix.patch
new file mode 100644
index 000000000..3a86e3ca7
--- /dev/null
+++ b/community/fbpanel/battery_fix.patch
@@ -0,0 +1,119 @@
+*** fbpanel-6.1/plugins/battery/os_linux.c~ 2010-04-08 12:35:26.000000000 +0200
+--- fbpanel-6.1/plugins/battery/os_linux.c 2013-07-09 13:13:50.958994816 +0200
+***************
+*** 1,5 ****
+--- 1,6 ----
+
+ #include <string.h>
++ #include <stdlib.h>
+ #include <ctype.h>
+
+ #define LEN 100
+***************
+*** 120,129 ****
+ }
+
+ static gboolean
+ battery_update_os_sys(battery_priv *c)
+ {
+ ENTER;
+! RET(FALSE);
+ }
+
+ static gboolean
+--- 121,215 ----
+ }
+
+ static gboolean
++ read_sys(battery_priv *c, GString *path)
++ {
++ int len, dcap, rcap;
++ gchar *buf;
++ gboolean ret, exist, charging;
++
++ ENTER;
++ len = path->len;
++
++ g_string_append(path, "/present");
++ ret = g_file_get_contents(path->str, &buf, 0, NULL);
++ DBG("reading %s %s\n", path->str, ret ? "ok" : "fail");
++ g_string_truncate(path, len);
++ if (!ret)
++ RET(FALSE);
++ exist = atoi(buf);
++ g_free(buf);
++ if (!exist)
++ RET(FALSE);
++
++ g_string_append(path, "/charge_full_design");
++ ret = g_file_get_contents(path->str, &buf, 0, NULL);
++ DBG("reading %s %s\n", path->str, ret ? "ok" : "fail");
++ g_string_truncate(path, len);
++ if (!ret)
++ RET(FALSE);
++ dcap = atoi(buf);
++ g_free(buf);
++ if (dcap <= 0)
++ RET(FALSE);
++
++ g_string_append(path, "/charge_now");
++ ret = g_file_get_contents(path->str, &buf, 0, NULL);
++ DBG("reading %s %s\n", path->str, ret ? "ok" : "fail");
++ g_string_truncate(path, len);
++ if (!ret)
++ RET(FALSE);
++ rcap = atoi(buf);
++ g_free(buf);
++ if (rcap <= 0)
++ RET(FALSE);
++
++ g_string_append(path, "/current_now");
++ ret = g_file_get_contents(path->str, &buf, 0, NULL);
++ DBG("reading %s %s\n", path->str, ret ? "ok" : "fail");
++ g_string_truncate(path, len);
++ if (!ret)
++ RET(FALSE);
++ charging = (atoi(buf) <= 0);
++ g_free(buf);
++
++ c->exist = exist;
++ c->charging = charging;
++ c->level = (int) ((gfloat) rcap * 100 / (gfloat) dcap);
++ RET(TRUE);
++ }
++
++ static gboolean
+ battery_update_os_sys(battery_priv *c)
+ {
++ GString *path;
++ int len;
++ GDir *dir;
++ gboolean ret = FALSE;
++ const gchar *file;
++
+ ENTER;
+! c->exist = FALSE;
+! path = g_string_sized_new(200);
+! g_string_append(path, "/sys/class/power_supply");
+! len = path->len;
+! if (!(dir = g_dir_open(path->str, 0, NULL))) {
+! DBG("can't open dir %s\n", path->str);
+! goto out;
+! }
+! while (!ret && (file = g_dir_read_name(dir))) {
+! g_string_append(path, "/");
+! g_string_append(path, file);
+! DBG("testing %s\n", path->str);
+! ret = g_file_test(path->str, G_FILE_TEST_IS_DIR);
+! if (ret)
+! ret = read_sys(c, path);
+! g_string_truncate(path, len);
+! }
+! g_dir_close(dir);
+!
+! out:
+! g_string_free(path, TRUE);
+! RET(ret);
+ }
+
+ static gboolean