diff --git a/src/modules/sysinfo/batman/batman.c b/src/modules/sysinfo/batman/batman.c index 534c747db..be6d7e0a7 100644 --- a/src/modules/sysinfo/batman/batman.c +++ b/src/modules/sysinfo/batman/batman.c @@ -42,10 +42,7 @@ static void _batman_face_level_set(Evas_Object *battery, double level) { Edje_Message_Float msg; - char buf[256]; - snprintf(buf, sizeof(buf), "%i", (int)(level * 100.0)); - elm_layout_text_set(battery, "e.text.reading", buf); if (level < 0.0) level = 0.0; else if (level > 1.0) level = 1.0; @@ -54,22 +51,92 @@ _batman_face_level_set(Evas_Object *battery, double level) } static void -_batman_face_time_set(Evas_Object *battery, int t) +_batman_popup_dismissed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { - char buf[256]; - int hrs, mins; + Instance *inst = data; + E_FREE_FUNC(obj, evas_object_del); + inst->cfg->batman.popup = NULL; +} - if (t < 0) return; +static void +_batman_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Instance *inst = data; + inst->cfg->batman.popup = NULL; +} - hrs = (t / 3600); - mins = ((t) / 60 - (hrs * 60)); +static Evas_Object * +_batman_popup_create(Instance *inst) +{ + Evas_Object *popup, *box, *frame, *pbar; + Battery *bat; + Eina_List *l; + char buf[4096]; + int hrs = 0, mins = 0; + + hrs = (inst->cfg->batman.time_left / 3600); + mins = ((inst->cfg->batman.time_left) / 60 - (hrs * 60)); if (mins < 0) mins = 0; - snprintf(buf, sizeof(buf), "%i:%02i", hrs, mins); - elm_layout_text_set(battery, "e.text.time", buf); + + popup = elm_ctxpopup_add(e_comp->elm); + elm_object_style_set(popup, "noblock"); + evas_object_smart_callback_add(popup, "dismissed", + _batman_popup_dismissed, inst); + evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, + _batman_popup_deleted, inst); + + frame = elm_frame_add(popup); + E_EXPAND(frame); E_FILL(frame); + snprintf(buf, sizeof(buf), _("Time Remaining: %i:%02i"), hrs, mins); + elm_object_text_set(frame, buf); + elm_object_content_set(popup, frame); + evas_object_show(frame); + + box = elm_box_add(frame); + elm_box_horizontal_set(box, EINA_FALSE); + E_EXPAND(box); E_FILL(box); + elm_object_content_set(frame, box); + evas_object_show(box); + + EINA_LIST_FOREACH(batman_device_batteries, l, bat) + { + pbar = elm_progressbar_add(frame); + E_EXPAND(pbar); E_FILL(pbar); + elm_progressbar_span_size_set(pbar, 200 * e_scale); + elm_progressbar_value_set(pbar, bat->percent / 100); + elm_object_content_set(frame, pbar); + evas_object_show(pbar); + } + e_gadget_util_ctxpopup_place(inst->o_main, popup, + inst->cfg->batman.o_gadget); + evas_object_show(popup); + + return popup; +} + +static void +_batman_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) +{ + Evas_Event_Mouse_Down *ev = event_data; + Instance *inst = data; + + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; + if (ev->button != 3) + { + if (inst->cfg->batman.popup) + { + elm_ctxpopup_dismiss(inst->cfg->batman.popup); + inst->cfg->batman.popup = NULL; + } + else + { + inst->cfg->batman.popup = _batman_popup_create(inst); + } + } } void -_batman_update(Instance *inst, int full, int time_left, int time_full, Eina_Bool have_battery, Eina_Bool have_power) +_batman_update(Instance *inst, int full, int time_left, Eina_Bool have_battery, Eina_Bool have_power) { static double debounce_time = 0.0; @@ -109,24 +176,6 @@ _batman_update(Instance *inst, int full, int time_left, int time_full, Eina_Bool else { _batman_face_level_set(inst->cfg->batman.o_gadget, 0.0); - elm_layout_text_set(inst->cfg->batman.o_gadget, - "e.text.reading", - _("N/A")); - } - - if ((time_full < 0) && (time_left != inst->cfg->batman.time_left)) - { - _batman_face_time_set(inst->cfg->batman.o_gadget, time_left); - if (inst->popup_battery) - _batman_face_time_set(inst->popup_battery, - time_left); - } - else if ((time_left < 0) && (time_full != inst->cfg->batman.time_full)) - { - _batman_face_time_set(inst->cfg->batman.o_gadget, time_full); - if (inst->popup_battery) - _batman_face_time_set(inst->popup_battery, - time_full); } if (have_battery && (!have_power) && @@ -203,7 +252,6 @@ _batman_device_update(Instance *inst) Ac_Adapter *ac; int full = -1; int time_left = -1; - int time_full = -1; int have_battery = 0; int have_power = 0; int charging = 0; @@ -233,11 +281,6 @@ _batman_device_update(Instance *inst) if (time_left < 0) time_left = bat->time_left; else time_left += bat->time_left; } - if (bat->time_full > 0) - { - if (time_full < 0) time_full = bat->time_full; - else time_full += bat->time_full; - } charging += bat->charging; } @@ -248,12 +291,10 @@ _batman_device_update(Instance *inst) if ((full == 100) && have_power) { time_left = -1; - time_full = -1; } if (time_left < 1) time_left = -1; - if (time_full < 1) time_full = -1; - _batman_update(inst, full, time_left, time_full, have_battery, have_power); + _batman_update(inst, full, time_left, have_battery, have_power); } void @@ -340,6 +381,8 @@ _batman_warning_popup(Instance *inst, int t, double percent) { Evas_Object *popup_bg = NULL; int x, y, w, h; + char buf[4096]; + int hrs = 0, mins = 0; if ((!inst) || (inst->warning)) return; @@ -351,7 +394,13 @@ _batman_warning_popup(Instance *inst, int t, double percent) n.replaces_id = 0; n.icon.icon = "battery-low"; n.summary = _("Your battery is low!"); - n.body = _("AC power is recommended."); + + hrs = (t / 3600); + mins = ((t) / 60 - (hrs * 60)); + if (mins < 0) mins = 0; + snprintf(buf, 4096, _("AC power is recommended. %i:%02i Remaining"), hrs, mins); + + n.body = buf; n.timeout = inst->cfg->batman.alert_timeout * 1000; e_notification_client_send(&n, _batman_warning_popup_cb, inst); return; @@ -372,12 +421,12 @@ _batman_warning_popup(Instance *inst, int t, double percent) return; } - e_theme_edje_object_set(popup_bg, "base/theme/modules/battery/popup", - "e/modules/battery/popup"); - e_theme_edje_object_set(inst->popup_battery, "base/theme/modules/battery", - "e/modules/battery/main"); - if (edje_object_part_exists(elm_layout_edje_get(popup_bg), "e.swallow.battery")) - elm_layout_content_set(popup_bg, "e.swallow.battery", inst->popup_battery); + e_theme_edje_object_set(popup_bg, "base/theme/modules/batman/popup", + "e/modules/batman/popup"); + e_theme_edje_object_set(inst->popup_battery, "base/theme/modules/batman", + "e/modules/batman/main"); + if (edje_object_part_exists(elm_layout_edje_get(popup_bg), "e.swallow.batman")) + elm_layout_content_set(popup_bg, "e.swallow.batman", inst->popup_battery); else elm_layout_content_set(popup_bg, "battery", inst->popup_battery); @@ -397,7 +446,6 @@ _batman_warning_popup(Instance *inst, int t, double percent) evas_object_event_callback_add(inst->warning, EVAS_CALLBACK_MOUSE_DOWN, _batman_cb_warning_popup_hide, inst); - _batman_face_time_set(inst->popup_battery, t); _batman_face_level_set(inst->popup_battery, percent); edje_object_signal_emit(inst->popup_battery, "e,state,discharging", "e"); @@ -479,16 +527,18 @@ _batman_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) inst->cfg->batman.full = -2; inst->cfg->batman.time_left = -2; - inst->cfg->batman.time_full = -2; inst->cfg->batman.have_battery = -2; inst->cfg->batman.have_power = -2; inst->cfg->batman.o_gadget = elm_layout_add(inst->o_main); - e_theme_edje_object_set(inst->cfg->batman.o_gadget, "base/theme/modules/battery", - "e/modules/battery/main"); + e_theme_edje_object_set(inst->cfg->batman.o_gadget, "base/theme/modules/batman", + "e/modules/batman/main"); E_EXPAND(inst->cfg->batman.o_gadget); E_FILL(inst->cfg->batman.o_gadget); elm_box_pack_end(inst->o_main, inst->cfg->batman.o_gadget); + evas_object_event_callback_add(inst->cfg->batman.o_gadget, + EVAS_CALLBACK_MOUSE_DOWN, + _batman_mouse_down_cb, inst); evas_object_event_callback_add(inst->cfg->batman.o_gadget, EVAS_CALLBACK_RESIZE, _batman_resize_cb, inst); evas_object_show(inst->cfg->batman.o_gadget); evas_object_smart_callback_del_full(obj, "gadget_created", _batman_created_cb, data); @@ -500,15 +550,17 @@ sysinfo_batman_create(Evas_Object *parent, Instance *inst) { inst->cfg->batman.full = -2; inst->cfg->batman.time_left = -2; - inst->cfg->batman.time_full = -2; inst->cfg->batman.have_battery = -2; inst->cfg->batman.have_power = -2; inst->cfg->batman.o_gadget = elm_layout_add(parent); - e_theme_edje_object_set(inst->cfg->batman.o_gadget, "base/theme/modules/battery", - "e/modules/battery/main"); + e_theme_edje_object_set(inst->cfg->batman.o_gadget, "base/theme/modules/batman", + "e/modules/batman/main"); E_EXPAND(inst->cfg->batman.o_gadget); E_FILL(inst->cfg->batman.o_gadget); + evas_object_event_callback_add(inst->cfg->batman.o_gadget, + EVAS_CALLBACK_MOUSE_DOWN, + _batman_mouse_down_cb, inst); evas_object_event_callback_add(inst->cfg->batman.o_gadget, EVAS_CALLBACK_RESIZE, _batman_resize_cb, inst); evas_object_show(inst->cfg->batman.o_gadget); _batman_config_updated(inst); @@ -544,7 +596,6 @@ _conf_item_get(int *id) ci->batman.force_mode = 0; ci->batman.full = -2; ci->batman.time_left = -2; - ci->batman.time_full = -2; ci->batman.have_battery = -2; ci->batman.have_power = -2; #if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__ diff --git a/src/modules/sysinfo/batman/batman.h b/src/modules/sysinfo/batman/batman.h index 50a2bb4bb..8d13f2b50 100644 --- a/src/modules/sysinfo/batman/batman.h +++ b/src/modules/sysinfo/batman/batman.h @@ -79,7 +79,7 @@ struct _Ac_Adapter Eina_List *_batman_battery_find(const char *udi); Eina_List *_batman_ac_adapter_find(const char *udi); -void _batman_update(Instance *inst, int full, int time_left, int time_full, Eina_Bool have_battery, Eina_Bool have_power); +void _batman_update(Instance *inst, int full, int time_left, Eina_Bool have_battery, Eina_Bool have_power); void _batman_device_update(Instance *inst); /* in batman_fallback.c */ int _batman_fallback_start(Instance *inst); diff --git a/src/modules/sysinfo/batman/batman_fallback.c b/src/modules/sysinfo/batman/batman_fallback.c index 9f0cf877d..b6374d700 100644 --- a/src/modules/sysinfo/batman/batman_fallback.c +++ b/src/modules/sysinfo/batman/batman_fallback.c @@ -1235,7 +1235,7 @@ _batman_fallback_poll_cb(void *data) } #endif - _batman_update(inst, battery_full, time_left, time_left, have_battery, have_power); + _batman_update(inst, battery_full, time_left, have_battery, have_power); return EINA_TRUE; } diff --git a/src/modules/sysinfo/mod.c b/src/modules/sysinfo/mod.c index a88c5c83d..fe16c5636 100644 --- a/src/modules/sysinfo/mod.c +++ b/src/modules/sysinfo/mod.c @@ -79,7 +79,6 @@ sysinfo_init(void) ci->batman.force_mode = 0; ci->batman.full = -2; ci->batman.time_left = -2; - ci->batman.time_full = -2; ci->batman.have_battery = -2; ci->batman.have_power = -2; #if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__ diff --git a/src/modules/sysinfo/sysinfo.c b/src/modules/sysinfo/sysinfo.c index e0327f9c8..421e76081 100644 --- a/src/modules/sysinfo/sysinfo.c +++ b/src/modules/sysinfo/sysinfo.c @@ -90,7 +90,6 @@ _conf_item_get(int *id) ci->batman.force_mode = 0; ci->batman.full = -2; ci->batman.time_left = -2; - ci->batman.time_full = -2; ci->batman.have_battery = -2; ci->batman.have_power = -2; #if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__ diff --git a/src/modules/sysinfo/sysinfo.h b/src/modules/sysinfo/sysinfo.h index f03513235..a53ae50b3 100644 --- a/src/modules/sysinfo/sysinfo.h +++ b/src/modules/sysinfo/sysinfo.h @@ -126,6 +126,7 @@ struct _Config_Item struct { Evas_Object *o_gadget; + Evas_Object *popup; /* saved * loaded config values */ int poll_interval; int alert; /* Alert on minutes remaining */ @@ -141,7 +142,6 @@ struct _Config_Item Ecore_Timer *alert_timer; int full; int time_left; - int time_full; int have_battery; int have_power; int desktop_notifications;