Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/modules/battery


Modified Files:
        e_mod_main.c e_mod_main.h 


Log Message:
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.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/battery/e_mod_main.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- e_mod_main.c        7 Feb 2005 11:29:35 -0000       1.13
+++ e_mod_main.c        9 Feb 2005 12:14:08 -0000       1.14
@@ -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;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/battery/e_mod_main.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_mod_main.h        25 Jan 2005 14:24:37 -0000      1.5
+++ e_mod_main.h        9 Feb 2005 12:14:08 -0000       1.6
@@ -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);




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to