Hi!
Move action from Battery_Face to Battery (We only need to check the battery once, even if there are multiple faces).
Clean up battery check.
If nobody objects, I'll commit.
Sebastian
Index: e_mod_main.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/battery/e_mod_main.c,v
retrieving revision 1.13
diff -u -r1.13 e_mod_main.c
--- e_mod_main.c 7 Feb 2005 11:29:35 -0000 1.13
+++ e_mod_main.c 9 Feb 2005 11:58:16 -0000
@@ -1,32 +1,39 @@
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
#include "e.h"
#include "e_mod_main.h"
/* TODO List:
*
- * should support proepr resize and move handles in the edje.
- *
+ * fix menu pr. face
+ * separate face from battery
+ *
*/
/* module private routines */
static Battery *_battery_init(E_Module *m);
static void _battery_shutdown(Battery *e);
-static E_Menu *_battery_config_menu_new(Battery *e);
-static void _battery_config_menu_del(Battery *e, E_Menu *m);
+static void _battery_config_menu_new(Battery *e);
+static int _battery_cb_check(void *data);
+static Status *_battery_linux_acpi_check(Battery *ef);
+static Status *_battery_linux_apm_check(Battery *ef);
+
static void _battery_face_init(Battery_Face *ef);
static void _battery_face_free(Battery_Face *ef);
-static void _battery_cb_gmc_change(void *data, E_Gadman_Client *gmc,
E_Gadman_Change change);
-static void _battery_cb_face_down(void *data, Evas *e, Evas_Object *obj,
void *event_info);
-static int _battery_cb_check(void *data);
-static int _battery_linux_acpi_check(Battery_Face *ef);
-static int _battery_linux_apm_check(Battery_Face *ef);
-static void _battery_level_set(Battery_Face *ef, double level);
+static void _battery_face_cb_gmc_change(void *data, E_Gadman_Client *gmc,
E_Gadman_Change change);
+static void _battery_face_cb_mouse_down(void *data, Evas *e, Evas_Object
*obj, void *event_info);
+static void _battery_face_level_set(Battery_Face *ef, double level);
+
+static E_Config_DD *conf_edd;
+static E_Config_DD *conf_face_edd;
/* public module routines. all modules must have these */
void *
init(E_Module *m)
{
Battery *e;
-
+
/* check module api version */
if (m->api->version < E_MODULE_API_VERSION)
{
@@ -41,7 +48,7 @@
}
/* actually init battery */
e = _battery_init(m);
- m->config_menu = _battery_config_menu_new(e);
+ m->config_menu = e->config_menu;
return e;
}
@@ -49,19 +56,13 @@
shutdown(E_Module *m)
{
Battery *e;
-
+ if (m->config_menu)
+ m->config_menu = NULL;
+
e = m->data;
if (e)
- {
- if (m->config_menu)
- {
- _battery_config_menu_del(e, e->config_menu_alarm);
- _battery_config_menu_del(e, e->config_menu_poll);
- _battery_config_menu_del(e, m->config_menu);
- m->config_menu = NULL;
- }
- _battery_shutdown(e);
- }
+ _battery_shutdown(e);
+
return 1;
}
@@ -71,7 +72,7 @@
Battery *e;
e = m->data;
- e_config_domain_save("module.battery", e->conf_edd, e->conf);
+ e_config_domain_save("module.battery", conf_edd, e->conf);
return 1;
}
@@ -79,7 +80,7 @@
info(E_Module *m)
{
char buf[4096];
-
+
m->label = strdup("Battery");
snprintf(buf, sizeof(buf), "%s/module_icon.png", e_module_dir_get(m));
m->icon_file = strdup(buf);
@@ -102,20 +103,28 @@
_battery_init(E_Module *m)
{
Battery *e;
- Evas_List *managers, *l, *l2;
-
- e = calloc(1, sizeof(Battery));
+ Evas_List *managers, *l, *l2, *cl;
+
+ e = E_NEW(Battery, 1);
if (!e) return NULL;
-
- e->conf_edd = E_CONFIG_DD_NEW("Battery_Config", Config);
+
+ conf_face_edd = E_CONFIG_DD_NEW("Battery_Config_Face", Config_Face);
+#undef T
+#undef D
+#define T Config_Face
+#define D conf_face_edd
+ E_CONFIG_VAL(D, T, enabled, INT);
+
+ conf_edd = E_CONFIG_DD_NEW("Battery_Config", Config);
#undef T
#undef D
#define T Config
-#define D e->conf_edd
+#define D conf_edd
E_CONFIG_VAL(D, T, poll_time, DOUBLE);
E_CONFIG_VAL(D, T, alarm, INT);
-
- e->conf = e_config_domain_load("module.battery", e->conf_edd);
+ E_CONFIG_LIST(D, T, faces, conf_face_edd);
+
+ e->conf = e_config_domain_load("module.battery", conf_edd);
if (!e->conf)
{
e->conf = E_NEW(Config, 1);
@@ -124,40 +133,59 @@
}
E_CONFIG_LIMIT(e->conf->poll_time, 0.5, 1000.0);
E_CONFIG_LIMIT(e->conf->alarm, 0, 60);
-
+
+ _battery_config_menu_new(e);
+
+ e->battery_check_mode = CHECK_NONE;
+ e->battery_prev_drain = 1;
+ e->battery_prev_ac = -1;
+ e->battery_prev_battery = -1;
+ e->battery_check_timer = ecore_timer_add(e->conf->poll_time,
_battery_cb_check, e);
+
managers = e_manager_list();
for (l = managers; l; l = l->next)
{
E_Manager *man;
-
+
man = l->data;
for (l2 = man->containers; l2; l2 = l2->next)
{
E_Container *con;
Battery_Face *ef;
-
+
con = l2->data;
- ef = calloc(1, sizeof(Battery_Face));
+ ef = E_NEW(Battery_Face, 1);
if (ef)
{
ef->bat = e;
ef->con = con;
ef->evas = con->bg_evas;
_battery_face_init(ef);
- e->face = ef;
+ e->faces = evas_list_append(e->faces, ef);
}
}
}
+
+ _battery_cb_check(e);
+
return e;
}
static void
_battery_shutdown(Battery *e)
{
+ Evas_List *l;
+
free(e->conf);
- E_CONFIG_DD_FREE(e->conf_edd);
-
- _battery_face_free(e->face);
+ E_CONFIG_DD_FREE(conf_edd);
+ E_CONFIG_DD_FREE(conf_face_edd);
+
+ for (l = e->faces; l; l = l->next)
+ _battery_face_free(l->data);
+ evas_list_free(e->faces);
+
+ ecore_timer_del(e->battery_check_timer);
+ e_object_del(E_OBJECT(e->config_menu));
free(e);
}
@@ -165,7 +193,7 @@
_battery_menu_alarm_10(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->alarm = 10;
}
@@ -174,7 +202,7 @@
_battery_menu_alarm_20(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->alarm = 20;
}
@@ -183,7 +211,7 @@
_battery_menu_alarm_30(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->alarm = 30;
}
@@ -192,7 +220,7 @@
_battery_menu_alarm_40(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->alarm = 40;
}
@@ -201,7 +229,7 @@
_battery_menu_alarm_50(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->alarm = 50;
}
@@ -210,7 +238,7 @@
_battery_menu_alarm_60(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->alarm = 60;
}
@@ -219,7 +247,7 @@
_battery_menu_alarm_disable(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->alarm = 0;
}
@@ -228,11 +256,11 @@
_battery_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->poll_time = 1.0;
- ecore_timer_del(e->face->battery_check_timer);
- e->face->battery_check_timer =
ecore_timer_add(e->face->bat->conf->poll_time, _battery_cb_check, e->face);
+ ecore_timer_del(e->battery_check_timer);
+ e->battery_check_timer = ecore_timer_add(e->conf->poll_time,
_battery_cb_check, e);
e_config_save_queue();
}
@@ -240,11 +268,11 @@
_battery_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->poll_time = 5.0;
- ecore_timer_del(e->face->battery_check_timer);
- e->face->battery_check_timer =
ecore_timer_add(e->face->bat->conf->poll_time, _battery_cb_check, e->face);
+ ecore_timer_del(e->battery_check_timer);
+ e->battery_check_timer = ecore_timer_add(e->conf->poll_time,
_battery_cb_check, e);
e_config_save_queue();
}
@@ -252,11 +280,11 @@
_battery_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->poll_time = 10.0;
- ecore_timer_del(e->face->battery_check_timer);
- e->face->battery_check_timer =
ecore_timer_add(e->face->bat->conf->poll_time, _battery_cb_check, e->face);
+ ecore_timer_del(e->battery_check_timer);
+ e->battery_check_timer = ecore_timer_add(e->conf->poll_time,
_battery_cb_check, e);
e_config_save_queue();
}
@@ -264,11 +292,11 @@
_battery_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->poll_time = 30.0;
- ecore_timer_del(e->face->battery_check_timer);
- e->face->battery_check_timer =
ecore_timer_add(e->face->bat->conf->poll_time, _battery_cb_check, e->face);
+ ecore_timer_del(e->battery_check_timer);
+ e->battery_check_timer = ecore_timer_add(e->conf->poll_time,
_battery_cb_check, e);
e_config_save_queue();
}
@@ -276,89 +304,89 @@
_battery_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi)
{
Battery *e;
-
+
e = data;
e->conf->poll_time = 60.0;
- ecore_timer_del(e->face->battery_check_timer);
- e->face->battery_check_timer =
ecore_timer_add(e->face->bat->conf->poll_time, _battery_cb_check, e->face);
+ ecore_timer_del(e->battery_check_timer);
+ e->battery_check_timer = ecore_timer_add(e->conf->poll_time,
_battery_cb_check, e);
e_config_save_queue();
}
-static E_Menu *
+static void
_battery_config_menu_new(Battery *e)
{
- E_Menu *mn;
+ E_Menu *mn, *config_menu_alarm, *config_menu_poll;
E_Menu_Item *mi;
mn = e_menu_new();
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "Disable");
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (e->conf->alarm == 0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_alarm_disable, e);
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "10 mins");
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (e->conf->alarm == 10) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_alarm_10, e);
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "20 mins");
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (e->conf->alarm == 20) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_alarm_20, e);
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "30 mins");
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (e->conf->alarm == 30) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_alarm_30, e);
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "40 mins");
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (e->conf->alarm == 40) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_alarm_40, e);
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "50 mins");
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (e->conf->alarm == 50) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_alarm_50, e);
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "1 hour");
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (e->conf->alarm == 60) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_alarm_60, e);
-
- e->config_menu_alarm = mn;
-
+
+ config_menu_alarm = mn;
+
mn = e_menu_new();
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "Check Fast (1 sec)");
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (e->conf->poll_time == 1.0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_fast, e);
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "Check Medium (5 sec)");
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (e->conf->poll_time == 5.0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_medium, e);
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "Check Normal (10 sec)");
e_menu_item_radio_set(mi, 1);
@@ -380,34 +408,26 @@
if (e->conf->poll_time == 60.0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _battery_menu_very_slow, e);
- e->config_menu_poll = mn;
-
+ config_menu_poll = mn;
+
mn = e_menu_new();
-
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "Set Poll Time");
- e_menu_item_submenu_set(mi, e->config_menu_poll);
-
+ e_menu_item_submenu_set(mi, config_menu_poll);
+
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, "Set Alarm");
- e_menu_item_submenu_set(mi, e->config_menu_alarm);
-
- e->config_menu = mn;
-
- return mn;
-}
+ e_menu_item_submenu_set(mi, config_menu_alarm);
-static void
-_battery_config_menu_del(Battery *e, E_Menu *m)
-{
- e_object_del(E_OBJECT(m));
+ e->config_menu = mn;
}
static void
_battery_face_init(Battery_Face *ef)
{
Evas_Object *o;
-
+
evas_event_freeze(ef->evas);
o = edje_object_add(ef->evas);
ef->bat_object = o;
@@ -417,22 +437,14 @@
e_path_find(path_themes, "default.eet"),
"modules/battery/main");
evas_object_show(o);
-
+
o = evas_object_rectangle_add(ef->evas);
ef->event_object = o;
evas_object_layer_set(o, 2);
evas_object_repeat_events_set(o, 1);
evas_object_color_set(o, 0, 0, 0, 0);
- evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
_battery_cb_face_down, ef);
+ evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
_battery_face_cb_mouse_down, ef);
evas_object_show(o);
-
- ef->battery_check_mode = CHECK_NONE;
- ef->battery_prev_drain = 1;
- ef->battery_prev_ac = -1;
- ef->battery_prev_battery = -1;
- ef->battery_check_timer = ecore_timer_add(ef->bat->conf->poll_time,
_battery_cb_check, ef);
-
- _battery_cb_check(ef);
ef->gmc = e_gadman_client_new(ef->con->gadman);
e_gadman_client_domain_set(ef->gmc, "module.battery", 0);
@@ -447,7 +459,7 @@
e_gadman_client_auto_size_set(ef->gmc, 64, 64);
e_gadman_client_align_set(ef->gmc, 1.0, 1.0);
e_gadman_client_resize(ef->gmc, 64, 64);
- e_gadman_client_change_func_set(ef->gmc, _battery_cb_gmc_change, ef);
+ e_gadman_client_change_func_set(ef->gmc, _battery_face_cb_gmc_change, ef);
e_gadman_client_load(ef->gmc);
evas_event_thaw(ef->evas);
}
@@ -455,7 +467,6 @@
static void
_battery_face_free(Battery_Face *ef)
{
- ecore_timer_del(ef->battery_check_timer);
e_object_del(E_OBJECT(ef->gmc));
evas_object_del(ef->bat_object);
evas_object_del(ef->event_object);
@@ -463,7 +474,7 @@
}
static void
-_battery_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change
change)
+_battery_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change
change)
{
Battery_Face *ef;
Evas_Coord x, y, w, h;
@@ -485,11 +496,11 @@
}
static void
-_battery_cb_face_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+_battery_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void
*event_info)
{
Evas_Event_Mouse_Down *ev;
Battery_Face *ef;
-
+
ev = event_info;
ef = data;
if (ev->button == 3)
@@ -504,9 +515,11 @@
static int
_battery_cb_check(void *data)
{
- Battery_Face *ef;
- int ret = 0;
-
+ Battery *ef;
+ Battery_Face *face;
+ Evas_List *l;
+ Status *ret = NULL;
+
ef = data;
if (ef->battery_check_mode == 0)
{
@@ -526,53 +539,144 @@
default:
break;
}
- if (!ret)
+ if (ret)
{
- if (ef->battery_prev_battery != -2)
+ if (ret->has_battery)
{
- edje_object_signal_emit(ef->bat_object, "unknown", "");
- ef->battery_prev_battery = -2;
+ if (ret->state == BATTERY_STATE_CHARGING)
+ {
+ for (l = ef->faces; l; l = l->next)
+ {
+ face = l->data;
+ if (ef->battery_prev_ac != 1)
+ edje_object_signal_emit(face->bat_object, "charge",
"");
+ edje_object_signal_emit(face->bat_object, "pulsestop",
"");
+ edje_object_part_text_set(face->bat_object, "reading",
ret->reading);
+ edje_object_part_text_set(face->bat_object, "time",
ret->time);
+ _battery_face_level_set(face, ret->level);
+
+ }
+ ef->battery_prev_ac = 1;
+ }
+ else if (ret->state == BATTERY_STATE_DISCHARGING)
+ {
+ for (l = ef->faces; l; l = l->next)
+ {
+ face = l->data;
+ if (ef->battery_prev_ac != 0)
+ edje_object_signal_emit(face->bat_object, "discharge",
"");
+ if (ret->alarm)
+ {
+ if (!ef->alarm_triggered)
+ {
+ e_error_dialog_show("Battery Running Low",
+ "Your battery is running
low.\n"
+ "You may wish to switch to
an AC source.");
+ }
+ edje_object_signal_emit(face->bat_object, "pulse",
"");
+ }
+ edje_object_part_text_set(face->bat_object, "reading",
ret->reading);
+ edje_object_part_text_set(face->bat_object, "time",
ret->time);
+ _battery_face_level_set(face, ret->level);
+
+ }
+ ef->battery_prev_ac = 0;
+ if (ret->alarm)
+ ef->alarm_triggered = 1;
+ }
+ else
+ {
+ /* ret->state == BATTERY_STATE_NONE */
+ for (l = ef->faces; l; l = l->next)
+ {
+ face = l->data;
+ if (ef->battery_prev_ac != 1)
+ edje_object_signal_emit(face->bat_object, "charge",
"");
+ if (ef->battery_prev_battery == 0)
+ edje_object_signal_emit(face->bat_object, "charge",
"");
+ edje_object_part_text_set(face->bat_object, "reading",
ret->reading);
+ edje_object_part_text_set(face->bat_object, "time",
ret->time);
+ _battery_face_level_set(face, ret->level);
+
+ }
+ ef->battery_prev_ac = 1;
+ ef->battery_prev_battery = 1;
+ }
}
- edje_object_part_text_set(ef->bat_object, "reading", "NO INFO");
- edje_object_part_text_set(ef->bat_object, "time", "--:--");
+ else
+ {
+ /* Hasn't battery */
+ for (l = ef->faces; l; l = l->next)
+ {
+ face = l->data;
+ if (ef->battery_prev_battery != 0)
+ edje_object_signal_emit(face->bat_object, "unknown", "");
+ edje_object_part_text_set(face->bat_object, "reading",
ret->reading);
+ edje_object_part_text_set(face->bat_object, "time",
ret->time);
+ _battery_face_level_set(face, ret->level);
+
+ }
+ ef->battery_prev_battery = 0;
+ }
+ free(ret->reading);
+ free(ret->time);
+ free(ret);
+ }
+ else
+ {
+ /* Error reading status */
+ for (l = ef->faces; l; l = l->next)
+ {
+ face = l->data;
+
+ if (ef->battery_prev_battery != -2)
+ edje_object_signal_emit(face->bat_object, "unknown", "");
+ edje_object_part_text_set(face->bat_object, "reading", "NO INFO");
+ edje_object_part_text_set(face->bat_object, "time", "--:--");
+ _battery_face_level_set(face, (double)(rand() & 0xff) / 255.0);
+ }
+ ef->battery_prev_battery = -2;
ef->battery_check_mode = CHECK_NONE;
- _battery_level_set(ef, (double)(rand() & 0xff) / 255.0);
}
return 1;
}
-static int
-_battery_linux_acpi_check(Battery_Face *ef)
+static Status *
+_battery_linux_acpi_check(Battery *ef)
{
Evas_List *bats;
char buf[4096], buf2[4096];
-
+
int bat_max = 0;
int bat_filled = 0;
int bat_level = 0;
int bat_drain = 1;
-
+
int bat_val = 0;
-
+
char current_status[256];
int discharging = 0;
int charging = 0;
int battery = 0;
-
+
int design_cap_unknown = 0;
int last_full_unknown = 0;
int rate_unknown = 0;
int level_unknown = 0;
-
+
int hours, minutes;
+ Status *stat;
+
+ stat = E_NEW(Status, 1);
+
/* Read some information on first run. */
bats = e_file_ls("/proc/acpi/battery");
- while (bats)
+ while (bats)
{
FILE *f;
char *name;
-
+
name = bats->data;
bats = evas_list_remove_list(bats, bats);
if ((!strcmp(name, ".")) || (!strcmp(name, "..")))
@@ -586,7 +690,7 @@
{
int design_cap = 0;
int last_full = 0;
-
+
fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
sscanf(buf2, "%*[^:]: %250s %*s", buf);
@@ -609,7 +713,7 @@
char charging_state[256];
int rate = 1;
int level = 0;
-
+
fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
sscanf(buf2, "%*[^:]: %250s", present);
fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
@@ -633,14 +737,14 @@
}
free(name);
}
-
+
if (ef->battery_prev_drain < 1) ef->battery_prev_drain = 1;
if (bat_drain < 1) bat_drain = ef->battery_prev_drain;
ef->battery_prev_drain = bat_drain;
-
+
if (bat_filled > 0) bat_val = (100 * bat_level) / bat_filled;
else bat_val = 100;
-
+
if (discharging) minutes = (60 * bat_level) / bat_drain;
else
{
@@ -651,208 +755,162 @@
}
hours = minutes / 60;
minutes -= (hours * 60);
-
+
if (hours < 0) hours = 0;
if (minutes < 0) minutes = 0;
-
- if ((charging) || (discharging))
+
+ if (!battery)
+ {
+ stat->has_battery = 0;
+ stat->state = BATTERY_STATE_NONE;
+ stat->reading = strdup("NO BAT");
+ stat->time = strdup("--:--");
+ stat->level = 1.0;
+ }
+ else if ((charging) || (discharging))
{
- ef->battery_prev_battery = 1;
+ ef->battery_prev_battery = 1;
+ stat->has_battery = 1;
if (charging)
{
- if (ef->battery_prev_ac != 1)
- {
- edje_object_signal_emit(ef->bat_object, "charge", "");
- ef->battery_prev_ac = 1;
- }
- edje_object_signal_emit(ef->bat_object, "pulsestop", "");
- ef->bat->alarm_triggered = 0;
+ stat->state = BATTERY_STATE_CHARGING;
+ ef->alarm_triggered = 0;
}
else if (discharging)
- {
- if (ef->battery_prev_ac != 0)
- {
- edje_object_signal_emit(ef->bat_object, "discharge", "");
- ef->battery_prev_ac = 0;
- }
- if (((hours * 60) + minutes) <= ef->bat->conf->alarm)
- {
- if (!ef->bat->alarm_triggered)
- {
- e_error_dialog_show("Battery Running Low",
- "Your battery is running low.\n"
- "You may wish to switch to an AC
source.");
- }
- edje_object_signal_emit(ef->bat_object, "pulse", "");
- ef->bat->alarm_triggered = 1;
- }
- }
+ {
+ stat->state = BATTERY_STATE_DISCHARGING;
+ if (((hours * 60) + minutes) <= ef->conf->alarm)
+ stat->alarm = 1;
+ }
if (level_unknown)
{
- edje_object_part_text_set(ef->bat_object, "reading", "BAD
DRIVER");
- edje_object_part_text_set(ef->bat_object, "time", "--:--");
- _battery_level_set(ef, 0.0);
+ stat->reading = strdup("BAD DRIVER");
+ stat->time = strdup("--:--");
+ stat->level = 0.0;
}
else if (rate_unknown)
{
snprintf(buf, sizeof(buf), "%i%%", bat_val);
- edje_object_part_text_set(ef->bat_object, "reading", buf);
- edje_object_part_text_set(ef->bat_object, "time", "--:--");
- _battery_level_set(ef, (double)bat_val / 100.0);
+ stat->reading = strdup(buf);
+ stat->time = strdup("--:--");
+ stat->level = (double)bat_val / 100.0;
}
else
{
snprintf(buf, sizeof(buf), "%i%%", bat_val);
- edje_object_part_text_set(ef->bat_object, "reading", buf);
+ stat->reading = strdup(buf);
snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
- edje_object_part_text_set(ef->bat_object, "time", buf);
- _battery_level_set(ef, (double)bat_val / 100.0);
- }
- }
- else if (!battery)
- {
- if (ef->battery_prev_battery != 0)
- {
- edje_object_signal_emit(ef->bat_object, "unknown", "");
- ef->battery_prev_battery = 0;
- }
- edje_object_part_text_set(ef->bat_object, "reading", "NO BAT");
- edje_object_part_text_set(ef->bat_object, "time", "--:--");
- _battery_level_set(ef, 1.0);
+ stat->time = strdup(buf);
+ stat->level = (double)bat_val / 100.0;
+ }
}
else
{
- if (ef->battery_prev_battery == 0)
- {
- edje_object_signal_emit(ef->bat_object, "charge", "");
- ef->battery_prev_battery = 1;
- }
- if (ef->battery_prev_ac != 1)
- {
- edje_object_signal_emit(ef->bat_object, "charge", "");
- ef->battery_prev_ac = 1;
- }
- edje_object_part_text_set(ef->bat_object, "reading", "FULL");
- edje_object_part_text_set(ef->bat_object, "time", "--:--");
- _battery_level_set(ef, 1.0);
+ stat->has_battery = 1;
+ stat->state = BATTERY_STATE_NONE;
+ stat->reading = strdup("FULL");
+ stat->time = strdup("--:--");
+ stat->level = 1.0;
}
- return 1;
+ return stat;
}
-static int
-_battery_linux_apm_check(Battery_Face *ef)
+static Status *
+_battery_linux_apm_check(Battery *ef)
{
FILE *f;
char s[256], s1[32], s2[32], s3[32], buf[4096];
int apm_flags, ac_stat, bat_stat, bat_flags, bat_val, time_val;
int hours, minutes;
-
+
+ Status *stat;
+
f = fopen("/proc/apm", "r");
- if (!f) return 0;
-
+ if (!f) return NULL;
+
fgets(s, sizeof(s), f); s[sizeof(s) - 1] = 0;
- if (sscanf(s, "%*s %*s %x %x %x %x %s %s %s",
+ if (sscanf(s, "%*s %*s %x %x %x %x %s %s %s",
&apm_flags, &ac_stat, &bat_stat, &bat_flags, s1, s2, s3) != 7)
{
fclose(f);
- return 0;
+ return NULL;
}
s1[strlen(s1) - 1] = 0;
bat_val = atoi(s1);
if (!strcmp(s3, "sec")) time_val = atoi(s2);
else if (!strcmp(s3, "min")) time_val = atoi(s2) * 60;
fclose(f);
-
+
+ stat = E_NEW(Status, 1);
+
if ((bat_flags != 0xff) && (bat_flags & 0x80))
{
- if (ef->battery_prev_battery != 0)
- {
- edje_object_signal_emit(ef->bat_object, "unknown", "");
- ef->battery_prev_battery = 0;
- }
- edje_object_part_text_set(ef->bat_object, "reading", "NO BAT");
- edje_object_part_text_set(ef->bat_object, "time", "--:--");
- _battery_level_set(ef, 1.0);
+ stat->has_battery = 0;
+ stat->state = BATTERY_STATE_NONE;
+ stat->reading = strdup("NO BAT");
+ stat->time = strdup("--:--");
+ stat->level = 1.0;
+ return stat;
+ }
+
+ ef->battery_prev_battery = 1;
+ stat->has_battery = 1;
+ if (bat_val > 0)
+ {
+ snprintf(buf, sizeof(buf), "%i%%", bat_val);
+ stat->reading = strdup(buf);
+ stat->level = (double)bat_val / 100.0;
}
else
{
- ef->battery_prev_battery = 1;
- if (bat_val > 0)
+ switch (bat_stat)
{
- snprintf(buf, sizeof(buf), "%i%%", bat_val);
- edje_object_part_text_set(ef->bat_object, "reading", buf);
- _battery_level_set(ef, (double)bat_val / 100.0);
- }
- else
- {
- switch (bat_stat)
- {
- case 0:
- edje_object_part_text_set(ef->bat_object, "reading", "High");
- _battery_level_set(ef, 1.0);
- break;
- case 1:
- edje_object_part_text_set(ef->bat_object, "reading", "Low");
- _battery_level_set(ef, 0.50);
- break;
- case 2:
- edje_object_part_text_set(ef->bat_object, "reading",
"Danger");
- _battery_level_set(ef, 0.25);
- break;
- case 3:
- edje_object_part_text_set(ef->bat_object, "reading",
"Charge");
- _battery_level_set(ef, 1.0);
- break;
- }
+ case 0:
+ stat->reading = strdup("High");
+ stat->level = 1.0;
+ break;
+ case 1:
+ stat->reading = strdup("Low");
+ stat->level = 0.5;
+ break;
+ case 2:
+ stat->reading = strdup("Danger");
+ stat->level = 0.25;
+ break;
+ case 3:
+ stat->reading = strdup("Charge");
+ stat->level = 1.0;
+ break;
}
}
-
+
if (ac_stat == 1)
{
- if ((ac_stat == 1) && (ef->battery_prev_ac == 0))
- {
- edje_object_signal_emit(ef->bat_object, "charge", "");
- ef->battery_prev_ac = 1;
- }
- else if ((ac_stat == 0) && (ef->battery_prev_ac == 1))
- {
- edje_object_signal_emit(ef->bat_object, "discharge", "");
- ef->battery_prev_ac = 0;
- }
- edje_object_part_text_set(ef->bat_object, "time", "--:--");
+ stat->state = BATTERY_STATE_CHARGING;
+ stat->time = strdup("--:--");
}
else
{
- hours = time_val / 3600;
- minutes = (time_val / 60) % 60;
- snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
- edje_object_part_text_set(ef->bat_object, "time", buf);
-
- if (((hours * 60) + minutes) <= ef->bat->conf->alarm)
- {
- if (!ef->bat->alarm_triggered)
- {
- e_error_dialog_show("Battery Running Low",
- "Your battery is running low.\n"
- "You may wish to switch to an AC
source.");
- }
- edje_object_signal_emit(ef->bat_object, "pulse", "");
- ef->bat->alarm_triggered = 1;
- }
- else
- {
- edje_object_signal_emit(ef->bat_object, "pulsestop", "");
- ef->bat->alarm_triggered = 0;
- }
- }
- return 1;
+ /* ac_stat == 0 */
+ stat->state = BATTERY_STATE_DISCHARGING;
+
+ hours = time_val / 3600;
+ minutes = (time_val / 60) % 60;
+ snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
+ stat->time = strdup(buf);
+
+ if (((hours * 60) + minutes) <= ef->conf->alarm)
+ stat->alarm = 1;
+ }
+
+ return stat;
}
static void
-_battery_level_set(Battery_Face *ef, double level)
+_battery_face_level_set(Battery_Face *ef, double level)
{
Edje_Message_Float msg;
-
+
if (level < 0.0) level = 0.0;
else if (level > 1.0) level = 1.0;
msg.val = level;
Index: e_mod_main.h
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/battery/e_mod_main.h,v
retrieving revision 1.5
diff -u -r1.5 e_mod_main.h
--- e_mod_main.h 25 Jan 2005 14:24:37 -0000 1.5
+++ e_mod_main.h 9 Feb 2005 11:58:16 -0000
@@ -1,10 +1,16 @@
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
#ifndef E_MOD_MAIN_H
#define E_MOD_MAIN_H
typedef struct _Config Config;
+typedef struct _Config_Face Config_Face;
typedef struct _Battery Battery;
typedef struct _Battery_Face Battery_Face;
+typedef struct _Status Status;
+
#define CHECK_NONE 0
#define CHECK_LINUX_ACPI 1
#define CHECK_LINUX_APM 2
@@ -13,18 +19,27 @@
{
double poll_time;
int alarm;
+ Evas_List *faces;
+};
+
+struct _Config_Face
+{
+ unsigned char enabled;
};
struct _Battery
{
- E_Menu *config_menu;
- E_Menu *config_menu_alarm;
- E_Menu *config_menu_poll;
- Battery_Face *face;
-
- E_Config_DD *conf_edd;
+ E_Menu *config_menu;
+ Evas_List *faces;
+
Config *conf;
int alarm_triggered;
+
+ int battery_check_mode;
+ Ecore_Timer *battery_check_timer;
+ int battery_prev_drain;
+ int battery_prev_ac;
+ int battery_prev_battery;
};
struct _Battery_Face
@@ -32,19 +47,40 @@
Battery *bat;
E_Container *con;
Evas *evas;
-
+
Evas_Object *bat_object;
Evas_Object *event_object;
-
- int battery_check_mode;
- Ecore_Timer *battery_check_timer;
- int battery_prev_drain;
- int battery_prev_ac;
- int battery_prev_battery;
-
+
E_Gadman_Client *gmc;
};
+#define BATTERY_STATE_NONE 0
+#define BATTERY_STATE_CHARGING 1
+#define BATTERY_STATE_DISCHARGING 2
+
+struct _Status
+{
+ /* Low battery */
+ unsigned char alarm;
+ /* Is there a battery? */
+ unsigned char has_battery;
+ /* charging, discharging, none */
+ unsigned char state;
+ /* Battery level */
+ double level;
+ /* Text */
+ /* reading == % left */
+ char *reading;
+ /* time == time left to empty / full */
+ char *time;
+ /* Signals */
+ /* charge == (ac == on), (fade_clip == default) */
+ /* pulsestop == (pulse_clip == default) */
+ /* discharge == (ac == off), (fade_clip == default) */
+ /* pulse == (pulse_clip == faded), .... */
+ /* unknown == (fade_clip == faded) */
+};
+
EAPI void *init (E_Module *m);
EAPI int shutdown (E_Module *m);
EAPI int save (E_Module *m);
