netstar pushed a commit to branch master.
http://git.enlightenment.org/core/enlightenment.git/commit/?id=9ab00c598b34b76475ec1b06d0c7b79b9e87310c
commit 9ab00c598b34b76475ec1b06d0c7b79b9e87310c
Author: Alastair Poole <[email protected]>
Date: Sun Mar 7 19:18:17 2021 +0000
battery: WiP RFC.
How many instances do we need? I'd argue one, or once one poller.
If this is a problem let me know...
---
src/modules/battery/e_mod_main.c | 93 +++++++++++++++++++++++++++++---------
src/modules/battery/e_mod_sysctl.c | 4 +-
2 files changed, 74 insertions(+), 23 deletions(-)
diff --git a/src/modules/battery/e_mod_main.c b/src/modules/battery/e_mod_main.c
index d5408c574..5533f3893 100644
--- a/src/modules/battery/e_mod_main.c
+++ b/src/modules/battery/e_mod_main.c
@@ -31,9 +31,11 @@ typedef struct _Instance Instance;
typedef struct __Popup_Widgets
{
- Evas_Object *pb;
Evas_Object *fr;
Evas_Object *lb_state;
+ Evas_Object *pb_usage;
+ Evas_Object *lb_time;
+ Evas_Object *pb_health;
} _Popup_Widgets;
typedef struct __Popup_Data
@@ -203,6 +205,8 @@ _popup_usage_content_update_cb(void *data)
_Popup_Data *pd;
Eina_List *l;
Battery *bat;
+ char buf[128];
+ int hrs, mins, t = 0;
unsigned int i = 0;
pd = data;
@@ -219,13 +223,28 @@ _popup_usage_content_update_cb(void *data)
EINA_LIST_FOREACH(device_batteries, l, bat)
{
_Popup_Widgets *w = &pd->widgets[i++];
- elm_progressbar_value_set(w->pb, (double) bat->percent / 100.0);
+ snprintf(buf, sizeof(buf), "%s (%s)", bat->vendor, bat->model);
+ elm_object_text_set(w->fr, buf);
if ((battery_config->have_power) && (!bat->charging))
elm_object_text_set(w->lb_state, _("Charged"));
else if (bat->charging)
- elm_object_text_set(w->lb_state, _("Charging"));
+ {
+ t = bat->time_full;
+ elm_object_text_set(w->lb_state, _("Charging"));
+ }
else
- elm_object_text_set(w->lb_state, _("Discharging"));
+ {
+ t = bat->time_left;
+ elm_object_text_set(w->lb_state, _("Discharging"));
+ }
+ hrs = (t / 3600);
+ mins = ((t) / 60 - (hrs * 60));
+ if (mins < 0) mins = 0;
+ snprintf(buf, sizeof(buf), "%i:%02i", hrs, mins);
+ elm_object_text_set(w->lb_time, buf);
+ elm_progressbar_value_set(w->pb_usage, (double) bat->percent / 100.0);
+ elm_progressbar_value_set(w->pb_health,
+ ((double) bat->last_full_charge /
(bat->design_charge / 100)) / 100);
if (i == (pd->n_units - 1)) break;
}
@@ -235,7 +254,7 @@ _popup_usage_content_update_cb(void *data)
static Evas_Object *
_popup_usage_content_add(Evas_Object *parent, Instance *inst)
{
- Evas_Object *tb, *fr, *bx, *lb, *pb, *sep, *o;
+ Evas_Object *tb, *tb2, *fr, *lb, *pb, *sep, *rec;
_Popup_Data *pd;
unsigned int n;
@@ -252,40 +271,67 @@ _popup_usage_content_add(Evas_Object *parent, Instance *inst)
{
_Popup_Widgets *w = &pd->widgets[i];
- o = evas_object_rectangle_add(evas_object_evas_get(parent));
- evas_object_size_hint_min_set(o, ELM_SCALE_SIZE(160), 1);
- evas_object_size_hint_max_set(o, ELM_SCALE_SIZE(320), -1);
- elm_table_pack(tb, o, 0, i, 1, 1);
+ rec = evas_object_rectangle_add(evas_object_evas_get(parent));
+ evas_object_size_hint_min_set(rec, ELM_SCALE_SIZE(240), 1);
+ evas_object_size_hint_max_set(rec, ELM_SCALE_SIZE(320), -1);
+ elm_table_pack(tb, rec, 0, i, 1, 1);
w->fr = fr = elm_frame_add(parent);
E_FILL(fr); E_EXPAND(fr);
- elm_object_style_set(fr, "pad_small");
evas_object_show(fr);
elm_table_pack(tb, fr, 0, i++, 1, 1);
- bx = elm_box_add(parent);
- E_FILL(bx); E_EXPAND(bx);
- evas_object_show(bx);
- elm_object_content_set(fr, bx);
+ tb2 = elm_table_add(parent);
+ E_FILL(tb2); E_EXPAND(tb2);
+ evas_object_show(tb2);
+ elm_object_content_set(fr, tb2);
w->lb_state = lb = elm_label_add(parent);
E_ALIGN(lb, 0.5, 0.5);
+ evas_object_show(lb);
+ elm_table_pack(tb2, lb, 0, 0, 1, 1);
+ rec = evas_object_rectangle_add(evas_object_evas_get(parent));
+ evas_object_size_hint_min_set(rec, ELM_SCALE_SIZE(80), 1);
+ elm_table_pack(tb2, rec, 0, 0, 1, 1);
+
+ w->pb_usage = pb = elm_progressbar_add(parent);
+ E_FILL(pb); E_EXPAND(pb);
+ evas_object_show(pb);
+ elm_progressbar_span_size_set(pb, 1.0);
+ elm_table_pack(tb2, pb, 1, 0, 1, 1);
+
+ lb = elm_label_add(parent);
+ E_ALIGN(lb, 0.5, 0.5);
E_EXPAND(lb);
evas_object_show(lb);
- elm_box_pack_end(bx, lb);
+ elm_object_text_set(lb, _("Health"));
+ elm_table_pack(tb2, lb, 0, 1, 1, 1);
- w->pb = pb = elm_progressbar_add(parent);
+ w->pb_health = pb = elm_progressbar_add(parent);
E_FILL(pb); E_EXPAND(pb);
evas_object_show(pb);
elm_progressbar_span_size_set(pb, 1.0);
- elm_box_pack_end(bx, pb);
+ elm_table_pack(tb2, pb, 1, 1, 1, 1);
+
+ lb = elm_label_add(parent);
+ E_ALIGN(lb, 0.5, 0.5);
+ E_EXPAND(lb);
+ evas_object_show(lb);
+ elm_object_text_set(lb, _("Time"));
+ elm_table_pack(tb2, lb, 0, 2, 1, 1);
+
+ w->lb_time = lb = elm_label_add(parent);
+ E_ALIGN(lb, 0.5, 0.5);
+ E_EXPAND(lb);
+ evas_object_show(lb);
+ elm_table_pack(tb2, lb, 1, 2, 1, 1);
if (n == 1) continue;
sep = elm_separator_add(parent);
elm_separator_horizontal_set(sep, 1);
E_FILL(sep); E_EXPAND(sep);
evas_object_show(sep);
- elm_box_pack_end(bx, sep);
+ elm_table_pack(tb2, sep, 0, 3, 2, 1);
}
_popup_usage_content_update_cb(pd);
@@ -499,7 +545,7 @@ _battery_config_updated(void)
Eina_List *l;
Instance *inst;
char buf[4096];
- int ok = 0;
+ int ok = 1;
if (!battery_config) return;
@@ -519,11 +565,14 @@ _battery_config_updated(void)
(battery_config->force_mode == SUBSYSTEM))
{
#ifdef HAVE_EEZE
- ok = _battery_udev_start();
+ if (!eina_list_count(device_batteries))
+ ok = _battery_udev_start();
#elif defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__)
- ok = _battery_sysctl_start();
+ if (!eina_list_count(device_batteries))
+ ok = _battery_sysctl_start();
#else
- ok = _battery_upower_start();
+ if (!eina_list_count(device_batteries))
+ ok = _battery_upower_start();
#endif
}
if (ok) return;
diff --git a/src/modules/battery/e_mod_sysctl.c
b/src/modules/battery/e_mod_sysctl.c
index 0928b0d90..38d69c7c6 100644
--- a/src/modules/battery/e_mod_sysctl.c
+++ b/src/modules/battery/e_mod_sysctl.c
@@ -102,6 +102,8 @@ _battery_sysctl_start(void)
bat->technology = eina_stringshare_add(battio.bix.type);
bat->vendor = eina_stringshare_add(battio.bix.oeminfo);
bat->model = eina_stringshare_add(battio.bix.model);
+ bat->design_charge = battio.bix.dcap;
+ bat->last_full_charge = battio.bix.lfcap;
bat->poll = ecore_poller_add(ECORE_POLLER_CORE,
battery_config->poll_interval,
_battery_sysctl_battery_update_poll, NULL);
@@ -282,7 +284,7 @@ _battery_sysctl_battery_update()
bat->last_update = _time;
bat->charging = (battio.battinfo.state == ACPI_BATT_STAT_CHARGING) ? 1 : 0;
- bat->time_min = battio.battinfo.min;
+ bat->time_min = bat->time_full = battio.battinfo.min;
if (bat->time_min >= 0) bat->time_left = bat->time_min * 60;
close(fd);