[Pkg-e-commits] [SCM] Enlightenment 17 branch, upstream-vcs, updated. a8698069ec4eec9c2a189198fa5eec9854b168ac
mekius
mekius at alioth.debian.org
Sun May 4 21:40:37 UTC 2008
The following commit has been merged in the upstream-vcs branch:
commit 0c7c4964eca1623ff9373add2240d89ad3c5d2a3
Author: mekius <mekius>
Date: Sat May 3 19:51:49 2008 +0000
Add alert popup to battery module. Was broken after batget changes. Popup is now themeable and also a bit less intrusive.
diff --git a/data/themes/default_battery.edc b/data/themes/default_battery.edc
index d82953b..2223c0f 100644
--- a/data/themes/default_battery.edc
+++ b/data/themes/default_battery.edc
@@ -296,3 +296,90 @@ group {
}
}
}
+group {
+ name: "e/modules/battery/popup";
+ max: 420 96;
+ min: 240 64;
+ parts {
+ part {
+ name: "battery";
+ type: SWALLOW;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ min: 1 1;
+ max: 120 120;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 0.25 1.0;
+ }
+ }
+ }
+ part {
+ name: "text";
+ type: TEXT;
+ effect: SOFT_SHADOW;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: 120 1;
+ max: 300 48;
+ fixed: 1 1;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 1.0 0.5;
+ to_x:battery;
+ offset: 0 -7;
+ }
+ rel2 {
+ relative: 1.0 0.5;
+ offset: 0 -7;
+ }
+
+ text {
+ text: "Your battery is low!";
+ font: "Sans:style=Bold,Edje-Vera-Bold";
+ size: 10;
+ min: 1 1;
+ align: 0.5 1.0;
+ text_class: "module_large";
+ }
+ }
+ }
+ part {
+ name: "text2";
+ type: TEXT;
+ effect: SOFT_SHADOW;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ min: 120 1;
+ max: 300 48;
+ fixed: 1 1;
+ rel1 {
+ relative: 1.0 0.5;
+ to_x: battery;
+ offset: 5 7;
+ }
+ rel2 {
+ relative: 1.0 0.5;
+ offset: 0 7;
+ }
+
+ text {
+ text: "AC power is recommended.";
+ font: "Sans:style=Bold,Edje-Vera-Bold";
+ size: 10;
+ min: 1 1;
+ align: 0.5 1.0;
+ text_class: "module_large";
+ }
+ }
+ }
+ }
+}
diff --git a/src/modules/battery/e_mod_config.c b/src/modules/battery/e_mod_config.c
index a276a4b..e4aaaaf 100644
--- a/src/modules/battery/e_mod_config.c
+++ b/src/modules/battery/e_mod_config.c
@@ -3,10 +3,12 @@
struct _E_Config_Dialog_Data
{
- int show_alert;
+ int show_alert;
int poll_interval;
- int alarm_time;
- int alarm_percent;
+ int alert_time;
+ int alert_percent;
+ int dismiss_alert;
+ int alert_timeout;
};
/* Protos */
@@ -46,13 +48,20 @@ static void
_fill_data(E_Config_Dialog_Data *cfdata)
{
if (!battery_config) return;
- cfdata->alarm_time = battery_config->alarm;
- cfdata->alarm_percent = battery_config->alarm_p;
+ cfdata->alert_time = battery_config->alert;
+ cfdata->alert_percent = battery_config->alert_p;
cfdata->poll_interval = battery_config->poll_interval;
- if (cfdata->alarm_time > 0 || cfdata->alarm_percent > 0)
+ cfdata->alert_timeout = battery_config->alert_timeout;
+
+ if (cfdata->alert_time > 0 || cfdata->alert_percent > 0)
cfdata->show_alert = 1;
else
cfdata->show_alert = 0;
+
+ if (cfdata->alert_timeout > 0)
+ cfdata->dismiss_alert = 1;
+ else
+ cfdata->dismiss_alert = 0;
}
static void *
@@ -90,16 +99,23 @@ static int
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
if (!battery_config) return 0;
+
if (cfdata->show_alert)
- {
- battery_config->alarm = cfdata->alarm_time;
- battery_config->alarm_p = cfdata->alarm_percent;
- }
+ {
+ battery_config->alert = cfdata->alert_time;
+ battery_config->alert_p = cfdata->alert_percent;
+ }
else
- {
- battery_config->alarm = 0;
- battery_config->alarm_p = 0;
- }
+ {
+ battery_config->alert = 0;
+ battery_config->alert_p = 0;
+ }
+
+ if (cfdata->dismiss_alert)
+ battery_config->alert_timeout = cfdata->alert_timeout;
+ else
+ battery_config->alert_timeout = 0;
+
_battery_config_updated();
e_config_save_queue();
return 1;
@@ -117,7 +133,7 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
ob = e_widget_label_add(evas, _("Check battery every:"));
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 0, 1, 0);
- ob = e_widget_slider_add(evas, 1, 0, _("%1.0f ticks"), 1, 1024, 4, 0, NULL, &(cfdata->poll_interval), 200);
+ ob = e_widget_slider_add(evas, 1, 0, _("%1.0f ticks"), 1, 1024, 4, 0, NULL, &(cfdata->poll_interval), 256);
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 0, 1, 0);
ob = e_widget_check_add(evas, _("Show alert when battery is low"), &(cfdata->show_alert));
@@ -126,11 +142,20 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
ob = e_widget_label_add(evas, _("Alert when battery is down to:"));
e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 0, 1, 1);
- ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1, 60, 1, 0, NULL, &(cfdata->alarm_time), 200);
+ ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 0, 60, 1, 0, NULL, &(cfdata->alert_time), 60);
e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 0, 1, 0);
- ob = e_widget_slider_add(evas, 1, 0, _("%1.0f percent"), 1, 100, 1, 0, NULL, &(cfdata->alarm_percent), 200);
+ ob = e_widget_slider_add(evas, 1, 0, _("%1.0f percent"), 0, 100, 1, 0, NULL, &(cfdata->alert_percent), 100);
e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 0, 1, 0);
+
+ ob = e_widget_check_add(evas, _("Dismiss alert automatically"), &(cfdata->dismiss_alert));
+ e_widget_frametable_object_append(of, ob, 0, 6, 1, 1, 1, 1, 1, 0);
+
+ ob = e_widget_label_add(evas, _("Dismiss alert after:"));
+ e_widget_frametable_object_append(of, ob, 0, 7, 1, 1, 1, 0, 1, 0);
+
+ ob = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"), 1, 300, 1, 0, NULL, &(cfdata->alert_timeout), 150);
+ e_widget_frametable_object_append(of, ob, 0, 8, 1, 1, 1, 0, 1, 0);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
@@ -140,17 +165,25 @@ static int
_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
if (!battery_config) return 0;
+
battery_config->poll_interval = cfdata->poll_interval;
+
if (cfdata->show_alert)
- {
- battery_config->alarm = cfdata->alarm_time;
- battery_config->alarm_p = cfdata->alarm_percent;
- }
+ {
+ battery_config->alert = cfdata->alert_time;
+ battery_config->alert_p = cfdata->alert_percent;
+ }
else
- {
- battery_config->alarm = 0;
- battery_config->alarm_p = 0;
- }
+ {
+ battery_config->alert = 0;
+ battery_config->alert_p = 0;
+ }
+
+ if (cfdata->dismiss_alert)
+ battery_config->alert_timeout = cfdata->alert_timeout;
+ else
+ battery_config->alert_timeout = 0;
+
_battery_config_updated();
e_config_save_queue();
return 1;
diff --git a/src/modules/battery/e_mod_main.c b/src/modules/battery/e_mod_main.c
index 8695cd4..cd9722d 100644
--- a/src/modules/battery/e_mod_main.c
+++ b/src/modules/battery/e_mod_main.c
@@ -4,6 +4,8 @@
#include "e.h"
#include "e_mod_main.h"
+#define POPUP_DEBOUNCE_CYCLES 2
+
/***************************************************************************/
/**/
/* gadcon requirements */
@@ -36,15 +38,23 @@ struct _Instance
{
E_Gadcon_Client *gcc;
Evas_Object *o_battery;
+ Evas_Object *popup_battery;
+ E_Gadcon_Popup *warning;
};
static int _battery_cb_exe_data(void *data, int type, void *event);
static int _battery_cb_exe_del(void *data, int type, void *event);
static void _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _menu_cb_post(void *data, E_Menu *m);
-static void _battery_face_level_set(Instance *inst, double level);
+static void _battery_face_level_set(Evas_Object *battery, double level);
+static void _battery_face_time_set(Evas_Object *battery, int time);
static void _battery_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _battery_cb_warning_popup_hide(void *data, Evas *e, Evas_Object *obj, void *event);
+static void _battery_warning_popup_resize(Evas_Object *obj, int *w, int *h);
+static int _battery_warning_popup_destroy(void *data);
+static void _battery_warning_popup(Instance *inst, int time, double percent);
+
static E_Config_DD *conf_edd = NULL;
Config *battery_config = NULL;
@@ -72,7 +82,9 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
inst->gcc = gcc;
inst->o_battery = o;
-
+ inst->warning = NULL;
+ inst->popup_battery = NULL;
+
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
_button_cb_mouse_down, inst);
battery_config->instances = evas_list_append(battery_config->instances, inst);
@@ -88,6 +100,11 @@ _gc_shutdown(E_Gadcon_Client *gcc)
inst = gcc->data;
battery_config->instances = evas_list_remove(battery_config->instances, inst);
evas_object_del(inst->o_battery);
+ if(inst->warning)
+ {
+ e_object_del(E_OBJECT(inst->warning));
+ inst->popup_battery = NULL;
+ }
free(inst);
}
@@ -172,6 +189,8 @@ _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
e_util_evas_fake_mouse_up_later(inst->gcc->gadcon->evas,
ev->button);
}
+ if (ev->button == 1)
+ _battery_cb_warning_popup_hide(data, e, obj, event_info);
}
static void
@@ -183,14 +202,31 @@ _menu_cb_post(void *data, E_Menu *m)
}
static void
-_battery_face_level_set(Instance *inst, double level)
+_battery_face_level_set(Evas_Object *battery, double level)
{
Edje_Message_Float msg;
+ char buf[256];
+
+ snprintf(buf, sizeof(buf), "%i%%", (int)(level*100.0));
+ edje_object_part_text_set(battery, "e.text.reading", buf);
if (level < 0.0) level = 0.0;
else if (level > 1.0) level = 1.0;
msg.val = level;
- edje_object_message_send(inst->o_battery, EDJE_MESSAGE_FLOAT, 1, &msg);
+ edje_object_message_send(battery, EDJE_MESSAGE_FLOAT, 1, &msg);
+}
+
+static void _battery_face_time_set(Evas_Object *battery, int time_left)
+{
+ char buf[256];
+ int hrs, mins;
+
+ hrs = time_left / 3600;
+ mins = (time_left) / 60 - (hrs * 60);
+ snprintf(buf, sizeof(buf), "%i:%02i", hrs, mins);
+ if (hrs < 0) hrs = 0;
+ if (mins < 0) mins = 0;
+ edje_object_part_text_set(battery, "e.text.time", buf);
}
static void
@@ -223,6 +259,99 @@ _battery_config_updated(void)
NULL);
}
+static int
+_battery_warning_popup_destroy(void *data)
+{
+ Instance *inst;
+
+ inst = data;
+
+ if(!inst || !inst->warning) return;
+
+ e_object_del(E_OBJECT(inst->warning));
+ inst->warning = NULL;
+ inst->popup_battery = NULL;
+
+ return 0;
+}
+
+static void
+_battery_cb_warning_popup_hide(void *data, Evas *e, Evas_Object *obj, void *event)
+{
+ Instance *inst = NULL;
+
+ inst = (Instance *)data;
+
+ if(!inst || !inst->warning) return;
+
+ _battery_warning_popup_destroy(inst);
+}
+
+static void
+_battery_warning_popup_resize(Evas_Object *obj, int *w, int *h)
+{
+ int mw, mh;
+
+ edje_object_size_min_get(obj,&mw,&mh);
+ if (w) *w = mw;
+ if (h) *h = mh;
+}
+
+static void
+_battery_warning_popup(Instance *inst, int time, double percent)
+{
+ Evas *e = NULL;
+ Evas_Object *rect = NULL, *popup_bg = NULL;
+ int x,y,w,h;
+
+ if(!inst || inst->warning) return;
+
+ inst->warning = e_gadcon_popup_new(inst->gcc, _battery_warning_popup_resize);
+ if(!inst->warning) return;
+
+ e = inst->warning->win->evas;
+
+ popup_bg = edje_object_add(e);
+ inst->popup_battery = edje_object_add(e);
+
+ if(!popup_bg || !inst->popup_battery)
+ {
+ e_object_free(E_OBJECT(inst->warning));
+ inst->warning = NULL;
+ 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");
+ edje_object_part_swallow(popup_bg, "battery", inst->popup_battery);
+
+ e_gadcon_popup_content_set(inst->warning, popup_bg);
+ e_gadcon_popup_show(inst->warning);
+
+ evas_object_geometry_get(inst->warning->o_bg, &x, &y, &w, &h);
+
+ rect = evas_object_rectangle_add(e);
+ if(rect)
+ {
+ evas_object_move(rect, x, y);
+ evas_object_resize(rect, w, h);
+ evas_object_color_set(rect, 255, 255, 255, 0);
+ evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN ,
+ _battery_cb_warning_popup_hide, inst);
+ evas_object_repeat_events_set(rect, 1);
+ evas_object_show(rect);
+ }
+
+ _battery_face_time_set(inst->popup_battery, time);
+ _battery_face_level_set(inst->popup_battery, percent);
+ edje_object_signal_emit(inst->popup_battery, "e,state,discharging", "e");
+
+ if(battery_config->alert_timeout)
+ ecore_timer_add(battery_config->alert_timeout,_battery_warning_popup_destroy, inst);
+}
+
/***************************************************************************/
/**/
/* module setup */
@@ -243,20 +372,23 @@ e_modapi_init(E_Module *m)
#define T Config
#define D conf_edd
E_CONFIG_VAL(D, T, poll_interval, INT);
- E_CONFIG_VAL(D, T, alarm, INT);
- E_CONFIG_VAL(D, T, alarm_p, INT);
+ E_CONFIG_VAL(D, T, alert, INT);
+ E_CONFIG_VAL(D, T, alert_p, INT);
+ E_CONFIG_VAL(D, T, alert_timeout, INT);
battery_config = e_config_domain_load("module.battery", conf_edd);
if (!battery_config)
{
battery_config = E_NEW(Config, 1);
battery_config->poll_interval = 512;
- battery_config->alarm = 30;
- battery_config->alarm_p = 10;
+ battery_config->alert = 30;
+ battery_config->alert_p = 10;
+ battery_config->alert_timeout = 0;
}
E_CONFIG_LIMIT(battery_config->poll_interval, 4, 4096);
- E_CONFIG_LIMIT(battery_config->alarm, 0, 60);
- E_CONFIG_LIMIT(battery_config->alarm_p, 0, 100);
+ E_CONFIG_LIMIT(battery_config->alert, 0, 60);
+ E_CONFIG_LIMIT(battery_config->alert_p, 0, 100);
+ E_CONFIG_LIMIT(battery_config->alert_timeout, 0, 300);
battery_config->module = m;
@@ -359,6 +491,13 @@ _battery_cb_exe_data(void *data, int type, void *event)
edje_object_signal_emit(inst->o_battery, "e,state,unknown", "e");
edje_object_part_text_set(inst->o_battery, "e.text.reading", _("ERROR"));
edje_object_part_text_set(inst->o_battery, "e.text.time", _("ERROR"));
+
+ if(inst->popup_battery)
+ {
+ edje_object_signal_emit(inst->popup_battery, "e,state,unknown", "e");
+ edje_object_part_text_set(inst->popup_battery, "e.text.reading", _("ERROR"));
+ edje_object_part_text_set(inst->popup_battery, "e.text.time", _("ERROR"));
+ }
}
}
else
@@ -368,6 +507,8 @@ _battery_cb_exe_data(void *data, int type, void *event)
int have_battery = 0;
int have_power = 0;
Evas_List *l;
+ int mins, hrs;
+ static int debounce_popup = 0;
if (sscanf(ev->lines[i].line, "%i %i %i %i",
&full, &time_left, &have_battery, &have_power)
@@ -383,36 +524,47 @@ _battery_cb_exe_data(void *data, int type, void *event)
if (have_power)
edje_object_signal_emit(inst->o_battery, "e,state,charging", "e");
else
- edje_object_signal_emit(inst->o_battery, "e,state,discharging", "e");
+ {
+ edje_object_signal_emit(inst->o_battery, "e,state,discharging", "e");
+ if(inst->popup_battery)
+ edje_object_signal_emit(inst->popup_battery, "e,state,discharging", "e");
+ }
}
if (have_battery)
{
- if (battery_config->full != full)
- {
- char buf[256];
-
- snprintf(buf, sizeof(buf), "%i%%", full);
- edje_object_part_text_set(inst->o_battery, "e.text.reading", buf);
- _battery_face_level_set(inst, (double)full / 100.0);
- }
+ if (battery_config->full != full)
+ {
+ _battery_face_level_set(inst->o_battery, (double)full / 100.0);
+ if(inst->popup_battery)
+ _battery_face_level_set(inst->popup_battery, (double)full / 100.0);
+ }
}
else
- {
- edje_object_part_text_set(inst->o_battery, "e.text.reading", _("N/A"));
- _battery_face_level_set(inst, 0.0);
- }
+ {
+ _battery_face_level_set(inst->o_battery, 0.0);
+ edje_object_part_text_set(inst->o_battery, "e.text.reading", _("N/A"));
+ }
+
if (time_left != battery_config->time_left)
- {
- char buf[256];
- int mins, hrs;
-
- hrs = time_left / 3600;
- mins = (time_left) / 60 - (hrs * 60);
- snprintf(buf, sizeof(buf), "%i:%02i", hrs, mins);
- if (hrs < 0) hrs = 0;
- if (mins < 0) mins = 0;
- edje_object_part_text_set(inst->o_battery, "e.text.time", buf);
- }
+ {
+ _battery_face_time_set(inst->o_battery, time_left);
+ if(inst->popup_battery)
+ _battery_face_time_set(inst->popup_battery, time_left);
+ }
+
+ if (have_battery && !have_power && (full != 100) &&
+ ((battery_config->alert && ((time_left/60) <= battery_config->alert)) ||
+ (battery_config->alert_p && (full <= battery_config->alert_p)))
+ )
+ {
+ if(++debounce_popup == POPUP_DEBOUNCE_CYCLES)
+ _battery_warning_popup(inst, time_left, (double)full/100.0);
+ }
+ else if(have_power)
+ {
+ _battery_warning_popup_destroy(inst);
+ debounce_popup = 0;
+ }
}
if (!have_battery)
e_powersave_mode_set(E_POWERSAVE_MODE_LOW);
diff --git a/src/modules/battery/e_mod_main.h b/src/modules/battery/e_mod_main.h
index d1b4864..45e5fcb 100644
--- a/src/modules/battery/e_mod_main.h
+++ b/src/modules/battery/e_mod_main.h
@@ -17,14 +17,14 @@ struct _Config
{
/* saved * loaded config values */
int poll_interval;
- int alarm; /* Alarm on minutes remaining */
- int alarm_p; /* Alarm on percentage remaining */
+ int alert; /* Alert on minutes remaining */
+ int alert_p; /* Alert on percentage remaining */
+ int alert_timeout; /* Popup dismissal timeout */
/* just config state */
E_Module *module;
E_Config_Dialog *config_dialog;
Evas_List *instances;
E_Menu *menu;
- int alarm_triggered;
Ecore_Exe *batget_exe;
Ecore_Event_Handler *batget_data_handler;
Ecore_Event_Handler *batget_del_handler;
--
Enlightenment 17
More information about the Pkg-e-commits
mailing list