From 7743a24db235b62a3860cce9000d7171b851eabf Mon Sep 17 00:00:00 2001 From: Michael BOUCHAUD Date: Thu, 3 May 2012 20:16:34 +0000 Subject: [PATCH] e: make e_powersave values configurable SVN revision: 70698 --- config/default/e.src | 7 + config/illume/e.src | 7 + config/standard/e.src | 7 + src/bin/e_config.c | 28 +- src/bin/e_config.h | 12 +- src/bin/e_powersave.c | 61 ++- src/bin/e_powersave.h | 5 +- src/modules/battery/e_mod_main.c | 26 +- src/modules/conf_performance/Makefile.am | 4 +- .../e_int_config_powermanagement.c | 372 ++++++++++++++++++ .../e_int_config_powermanagement.h | 9 + src/modules/conf_performance/e_mod_main.c | 2 + src/modules/conf_performance/e_mod_main.h | 1 + 13 files changed, 497 insertions(+), 44 deletions(-) create mode 100644 src/modules/conf_performance/e_int_config_powermanagement.c create mode 100644 src/modules/conf_performance/e_int_config_powermanagement.h diff --git a/config/default/e.src b/config/default/e.src index bd9388693..d95bc2edb 100644 --- a/config/default/e.src +++ b/config/default/e.src @@ -524,4 +524,11 @@ group "E_Config" struct { value "update.later" uchar: 0; value "xkb.only_label" int: 0; value "xkb.default_model" string: "default"; + value "powersave.none" double: 0.25; + value "powersave.low" double: 5.0; + value "powersave.medium" double: 60.0; + value "powersave.high" double: 300.0; + value "powersave.extreme" double: 1200.0; + value "powersave.min" int: 0; + value "powersave.max" int: 5; } diff --git a/config/illume/e.src b/config/illume/e.src index f075f855b..1f9aeb615 100644 --- a/config/illume/e.src +++ b/config/illume/e.src @@ -211,6 +211,13 @@ group "E_Config" struct { value "xsettings.xft_hinting" int: 0; value "update.check" uchar: 1; value "update.later" uchar: 0; + value "powersave.none" double: 0.25; + value "powersave.low" double: 5.0; + value "powersave.medium" double: 60.0; + value "powersave.high" double: 300.0; + value "powersave.extreme" double: 1200.0; + value "powersave.min" int: 0; + value "powersave.max" int: 5; group "syscon.actions" list { group "E_Config_Syscon_Action" struct { value "action" string: "halt"; diff --git a/config/standard/e.src b/config/standard/e.src index 9de8ab34c..b3307af19 100644 --- a/config/standard/e.src +++ b/config/standard/e.src @@ -204,6 +204,13 @@ group "E_Config" struct { value "xsettings.xft_hinting" int: 0; value "update.check" uchar: 1; value "update.later" uchar: 0; + value "powersave.none" double: 0.25; + value "powersave.low" double: 5.0; + value "powersave.medium" double: 60.0; + value "powersave.high" double: 300.0; + value "powersave.extreme" double: 1200.0; + value "powersave.min" int: 0; + value "powersave.max" int: 5; group "syscon.actions" list { group "E_Config_Syscon_Action" struct { value "action" string: "halt"; diff --git a/src/bin/e_config.c b/src/bin/e_config.c index ebf2884b1..8d9c35d9a 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -898,6 +898,14 @@ e_config_init(void) E_CONFIG_VAL(D, T, deskenv.load_gnome, UCHAR); E_CONFIG_VAL(D, T, deskenv.load_kde, UCHAR); + E_CONFIG_VAL(D, T, powersave.none, DOUBLE); + E_CONFIG_VAL(D, T, powersave.low, DOUBLE); + E_CONFIG_VAL(D, T, powersave.medium, DOUBLE); + E_CONFIG_VAL(D, T, powersave.high, DOUBLE); + E_CONFIG_VAL(D, T, powersave.extreme, DOUBLE); + E_CONFIG_VAL(D, T, powersave.min, INT); + E_CONFIG_VAL(D, T, powersave.max, INT); + E_CONFIG_VAL(D, T, xsettings.enabled, UCHAR); E_CONFIG_VAL(D, T, xsettings.match_e17_theme, UCHAR); E_CONFIG_VAL(D, T, xsettings.match_e17_icon_theme, UCHAR); @@ -1191,6 +1199,16 @@ e_config_load(void) COPYVAL(update.later); IFCFGEND; + IFCFG(0x0149); + COPYVAL(powersave.none); + COPYVAL(powersave.low); + COPYVAL(powersave.medium); + COPYVAL(powersave.high); + COPYVAL(powersave.extreme); + COPYVAL(powersave.min); + COPYVAL(powersave.max); + IFCFGEND; + e_config->config_version = E_CONFIG_FILE_VERSION; _e_config_free(tcfg); } @@ -1336,7 +1354,15 @@ e_config_load(void) E_CONFIG_LIMIT(e_config->exec.show_exit_dialog, 0, 1); E_CONFIG_LIMIT(e_config->null_container_win, 0, 1); - + + E_CONFIG_LIMIT(e_config->powersave.none, 0.01, 5400.00); + E_CONFIG_LIMIT(e_config->powersave.low, 0.01, 5400.00); + E_CONFIG_LIMIT(e_config->powersave.medium, 0.01, 5400.00); + E_CONFIG_LIMIT(e_config->powersave.high, 0.01, 5400.00); + E_CONFIG_LIMIT(e_config->powersave.extreme, 0.01, 5400.00); + E_CONFIG_LIMIT(e_config->powersave.min, E_POWERSAVE_MODE_NONE, E_POWERSAVE_MODE_EXTREME); + E_CONFIG_LIMIT(e_config->powersave.max, E_POWERSAVE_MODE_NONE, E_POWERSAVE_MODE_EXTREME); + /* FIXME: disabled auto apply because it causes problems */ e_config->cfgdlg_auto_apply = 0; /* FIXME: desklock personalized password id disabled for security reasons */ diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 13a0091a5..e0853bf60 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -318,7 +318,17 @@ struct _E_Config unsigned char idle_dim; // GUI double timer; // GUI } backlight; - + + struct { + double none; + double low; + double medium; + double high; + double extreme; + E_Powersave_Mode min; + E_Powersave_Mode max; + } powersave; + struct { unsigned char load_xrdb; // GUI unsigned char load_xmodmap; // GUI diff --git a/src/bin/e_powersave.c b/src/bin/e_powersave.c index e073d527e..5444bc15a 100644 --- a/src/bin/e_powersave.c +++ b/src/bin/e_powersave.c @@ -9,14 +9,17 @@ struct _E_Powersave_Deferred_Action /* local subsystem functions */ static Eina_Bool _e_powersave_cb_deferred_timer(void *data); +static Eina_Bool _e_powersave_cb_config(void *data); static void _e_powersave_mode_eval(void); static void _e_powersave_event_update_free(void *data __UNUSED__, void *event); /* local subsystem globals */ EAPI int E_EVENT_POWERSAVE_UPDATE = 0; +EAPI int E_EVENT_POWERSAVE_CONFIG_UPDATE = 0; static int walking_deferred_actions = 0; static Eina_List *deferred_actions = NULL; static Ecore_Timer *deferred_timer = NULL; +static Ecore_Timer *config_timer = NULL; static E_Powersave_Mode powersave_mode_min = E_POWERSAVE_MODE_NONE; static E_Powersave_Mode powersave_mode_max = E_POWERSAVE_MODE_EXTREME; static E_Powersave_Mode powersave_mode = E_POWERSAVE_MODE_LOW; @@ -28,6 +31,7 @@ e_powersave_init(void) { _e_powersave_mode_eval(); E_EVENT_POWERSAVE_UPDATE = ecore_event_type_new(); + E_EVENT_POWERSAVE_CONFIG_UPDATE = ecore_event_type_new(); return 1; } @@ -41,7 +45,7 @@ EAPI E_Powersave_Deferred_Action * e_powersave_deferred_action_add(void (*func) (void *data), const void *data) { E_Powersave_Deferred_Action *pa; - + pa = calloc(1, sizeof(E_Powersave_Deferred_Action)); if (!pa) return NULL; if (deferred_timer) ecore_timer_del(deferred_timer); @@ -77,27 +81,13 @@ e_powersave_deferred_action_del(E_Powersave_Deferred_Action *pa) } } -EAPI void -e_powersave_mode_min_set(E_Powersave_Mode mode) -{ - powersave_mode_min = mode; - e_powersave_mode_set(powersave_mode); -} - -EAPI void -e_powersave_mode_max_set(E_Powersave_Mode mode) -{ - powersave_mode_max = mode; - e_powersave_mode_set(powersave_mode); -} - EAPI void e_powersave_mode_set(E_Powersave_Mode mode) { E_Event_Powersave_Update *ev; - if (mode < powersave_mode_min) mode = powersave_mode_min; - else if (mode > powersave_mode_max) mode = powersave_mode_max; + if (mode < e_config->powersave.min) mode = e_config->powersave.min; + else if (mode > e_config->powersave.max) mode = e_config->powersave.max; if (powersave_mode == mode) return; printf("CHANGE PW SAVE MODE TO %i / %i\n", (int)mode, E_POWERSAVE_MODE_EXTREME); powersave_mode = mode; @@ -108,17 +98,6 @@ e_powersave_mode_set(E_Powersave_Mode mode) _e_powersave_mode_eval(); } -EAPI E_Powersave_Mode -e_powersave_mode_min_get(void) -{ - return powersave_mode_min; -} - -EAPI E_Powersave_Mode -e_powersave_mode_max_get(void) -{ - return powersave_mode_max; -} EAPI E_Powersave_Mode e_powersave_mode_get(void) @@ -126,6 +105,18 @@ e_powersave_mode_get(void) return powersave_mode; } +EAPI E_Powersave_Mode +e_powersave_mode_min_get(void) +{ + return e_config->powersave.min; +} + +EAPI E_Powersave_Mode +e_powersave_mode_max_get(void) +{ + return e_config->powersave.max; +} + /* local subsystem functions */ static Eina_Bool @@ -148,24 +139,23 @@ static void _e_powersave_mode_eval(void) { double t = 0.0; - + switch (powersave_mode) { - /* FIXME: these values are hardcoded - should be configurable */ case E_POWERSAVE_MODE_NONE: - t = 0.25; /* time to defer "power expensive" activities */ + t = e_config->powersave.none; /* time to defer "power expensive" activities */ break; case E_POWERSAVE_MODE_LOW: - t = 5.0; + t = e_config->powersave.low; break; case E_POWERSAVE_MODE_MEDIUM: - t = 60.0; + t = e_config->powersave.medium; break; case E_POWERSAVE_MODE_HIGH: - t = 300.0; + t = e_config->powersave.high; break; case E_POWERSAVE_MODE_EXTREME: - t = 1200.0; + t = e_config->powersave.extreme; break; default: return; @@ -186,3 +176,4 @@ _e_powersave_event_update_free(void *data __UNUSED__, void *event) { free(event); } + diff --git a/src/bin/e_powersave.h b/src/bin/e_powersave.h index d31ee6f43..b2bfd407c 100644 --- a/src/bin/e_powersave.h +++ b/src/bin/e_powersave.h @@ -17,6 +17,7 @@ typedef struct _E_Event_Powersave_Update E_Event_Powersave_Update; #define E_POWERSAVE_H extern EAPI int E_EVENT_POWERSAVE_UPDATE; +extern EAPI int E_EVENT_POWERSAVE_CONFIG_UPDATE; struct _E_Event_Powersave_Update { @@ -28,11 +29,7 @@ EINTERN int e_powersave_shutdown(void); EAPI E_Powersave_Deferred_Action *e_powersave_deferred_action_add(void (*func) (void *data), const void *data); EAPI void e_powersave_deferred_action_del(E_Powersave_Deferred_Action *pa); -EAPI void e_powersave_mode_min_set(E_Powersave_Mode mode); -EAPI void e_powersave_mode_max_set(E_Powersave_Mode mode); EAPI void e_powersave_mode_set(E_Powersave_Mode mode); -EAPI E_Powersave_Mode e_powersave_mode_min_get(void); -EAPI E_Powersave_Mode e_powersave_mode_max_get(void); EAPI E_Powersave_Mode e_powersave_mode_get(void); /* FIXME: in the powersave system add things like pre-loading entire files diff --git a/src/modules/battery/e_mod_main.c b/src/modules/battery/e_mod_main.c index b29a1aada..f5210caaa 100644 --- a/src/modules/battery/e_mod_main.c +++ b/src/modules/battery/e_mod_main.c @@ -52,7 +52,10 @@ static void _battery_cb_warning_popup_hide(void *data, Evas *e, Evas_Object *obj static void _battery_warning_popup_destroy(Instance *inst); static void _battery_warning_popup(Instance *inst, int time, double percent); +static Eina_Bool _powersave_cb_config_update(void *data, int type, void *event); + static E_Config_DD *conf_edd = NULL; +static Ecore_Event_Handler *_handler = NULL; Config *battery_config = NULL; @@ -335,8 +338,6 @@ _battery_device_update(void) if (time_full < 1) time_full = -1; _battery_update(full, time_left, time_full, have_battery, have_power); - if ((acnum >= 0) && (batnum == 0)) - e_powersave_mode_set(E_POWERSAVE_MODE_LOW); } @@ -511,6 +512,25 @@ _battery_warning_popup(Instance *inst, int time, double percent) } } +static Eina_Bool +_powersave_cb_config_update(void *data, int type, void *event) +{ + if (!battery_config->have_battery) + e_powersave_mode_set(E_POWERSAVE_MODE_LOW); + else + { + if (battery_config->have_power) + e_powersave_mode_set(E_POWERSAVE_MODE_LOW); + else if (battery_config->full > 95) + e_powersave_mode_set(E_POWERSAVE_MODE_MEDIUM); + else if (battery_config->full > 30) + e_powersave_mode_set(E_POWERSAVE_MODE_HIGH); + else + e_powersave_mode_set(E_POWERSAVE_MODE_EXTREME); + } + return ECORE_CALLBACK_RENEW; +} + static void _battery_update(int full, int time_left, int time_full, Eina_Bool have_battery, Eina_Bool have_power) { @@ -778,6 +798,8 @@ e_modapi_init(E_Module *m) battery_config->batget_del_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _battery_cb_exe_del, NULL); + _handler = ecore_event_handler_add(E_EVENT_POWERSAVE_CONFIG_UPDATE, + _powersave_cb_config_update, NULL); e_gadcon_provider_register(&_gadcon_class); diff --git a/src/modules/conf_performance/Makefile.am b/src/modules/conf_performance/Makefile.am index d403d1f0a..a6c688cc2 100644 --- a/src/modules/conf_performance/Makefile.am +++ b/src/modules/conf_performance/Makefile.am @@ -23,7 +23,9 @@ module_la_SOURCES = e_mod_main.c \ e_int_config_performance.c \ e_int_config_performance.h \ e_int_config_engine.c \ - e_int_config_engine.h + e_int_config_engine.h \ + e_int_config_powermanagement.c \ + e_int_config_powermanagement.h module_la_LIBADD = @e_libs@ @dlopen_libs@ module_la_LDFLAGS = -module -avoid-version diff --git a/src/modules/conf_performance/e_int_config_powermanagement.c b/src/modules/conf_performance/e_int_config_powermanagement.c new file mode 100644 index 000000000..a8a574517 --- /dev/null +++ b/src/modules/conf_performance/e_int_config_powermanagement.c @@ -0,0 +1,372 @@ +#include "e.h" + +static void *_create_data(E_Config_Dialog *cfd); +static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static int _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +static void _cb_min_changed(void *data, Evas_Object *obj); +static void _cb_max_changed(void *data, Evas_Object *obj); + +struct _E_Config_Dialog_Data +{ + struct { + Eina_List *rmin; + Eina_List *rmax; + } gui; + double powersave_none; + double powersave_low; + double powersave_medium; + double powersave_high; + double powersave_extreme; + int powersave_min; + int powersave_max; +}; + +E_Config_Dialog * +e_int_config_powermanagement(E_Container *con, const char *params __UNUSED__) +{ + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + + if (e_config_dialog_find("E", "advanced/powermanagement")) return NULL; + v = E_NEW(E_Config_Dialog_View, 1); + + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->basic.apply_cfdata = _basic_apply; + v->basic.create_widgets = _basic_create; + v->basic.check_changed = _basic_check_changed; + + cfd = e_config_dialog_new(con, _("Power management Settings"), + "E", "advanced/powermanagement", + "preferences-system-powermanagement", 0, v, NULL); + return cfd; +} + +static void * +_create_data(E_Config_Dialog *cfd __UNUSED__) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = E_NEW(E_Config_Dialog_Data, 1); + if (!cfdata) return NULL; + cfdata->powersave_none = e_config->powersave.none; + cfdata->powersave_low = e_config->powersave.low; + cfdata->powersave_medium = e_config->powersave.medium; + cfdata->powersave_high = e_config->powersave.high; + cfdata->powersave_extreme = e_config->powersave.extreme; + return cfdata; +} + +static void +_free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) +{ + eina_list_free(cfdata->gui.rmin); + eina_list_free(cfdata->gui.rmax); + E_FREE(cfdata); +} + +static int +_basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) +{ + e_config->powersave.none = cfdata->powersave_none; + e_config->powersave.low = cfdata->powersave_low; + e_config->powersave.medium = cfdata->powersave_medium; + e_config->powersave.high = cfdata->powersave_high; + e_config->powersave.extreme = cfdata->powersave_extreme; + if (e_config->powersave.min != cfdata->powersave_min + || e_config->powersave.max != cfdata->powersave_max) + { + e_config->powersave.min = cfdata->powersave_min; + e_config->powersave.max = cfdata->powersave_max; + ecore_event_add(E_EVENT_POWERSAVE_CONFIG_UPDATE, + NULL, NULL, NULL); + } + + e_powersave_mode_set(e_powersave_mode_get()); + e_config_save_queue(); + return 1; +} + +static int +_basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) +{ + return ((e_config->powersave.min != cfdata->powersave_min) || + (e_config->powersave.max != cfdata->powersave_max) || + (e_config->powersave.none != cfdata->powersave_none) || + (e_config->powersave.low != cfdata->powersave_low) || + (e_config->powersave.medium != cfdata->powersave_medium) || + (e_config->powersave.high != cfdata->powersave_high) || + (e_config->powersave.extreme != cfdata->powersave_extreme)); +} + +static Evas_Object * +_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) +{ + Evas_Object *otb, *ob, *ol; + E_Radio_Group *rmin, *rmax; + + otb = e_widget_toolbook_add(evas, (24 * e_scale), (24 * e_scale)); + cfdata->powersave_min = e_config->powersave.min; + cfdata->powersave_max = e_config->powersave.max; + rmin = e_widget_radio_group_new(&(cfdata->powersave_min)); + rmax = e_widget_radio_group_new(&(cfdata->powersave_max)); + + ol = e_widget_table_add(evas, 0); + ob = e_widget_label_add(evas, _("Min")); + e_widget_table_object_align_append(ol, ob, + 0, 0, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_label_add(evas, _("Max")); + e_widget_table_object_align_append(ol, ob, + 1, 0, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + /* + ob = e_widget_label_add(evas, + _("Time to defer 'power expensive' activities")); + e_widget_table_object_align_append(ol, ob, + 2, 0, //place + 2, 1, //span + 1, 1, //fill + 1, 1, //expand + 0.0, 0.5 //align + );*/ + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_NONE, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 1, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_NONE, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 1, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("none")); + e_widget_table_object_align_append(ol, ob, + 2, 1, //place + 1, 1, //span + 0, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%1.2f minute"), 0.01, 1.0, 0, 0, + &(cfdata->powersave_none), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 1, //place + 1, 1, //span + 1, 1, //fill + 1, 1, //expand + 0.5, 0.5 //align + ); + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_LOW, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 2, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_LOW, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 2, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("low")); + e_widget_table_object_align_append(ol, ob, + 2, 2, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%1.2f minutes"), 1.0, 10.0, 1, 0, + &(cfdata->powersave_low), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 2, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_MEDIUM, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 3, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_MEDIUM, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 3, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("medium")); + e_widget_table_object_align_append(ol, ob, + 2, 3, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%.0f minutes"), 10.0, 120.0, 1, 0, + &(cfdata->powersave_medium), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 3, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_HIGH, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 4, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_HIGH, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 4, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("high")); + e_widget_table_object_align_append(ol, ob, + 2, 4, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%.0f minutes"), 120.0, 1200.0, 1, 0, + &(cfdata->powersave_high), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 4, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_EXTREME, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 5, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_EXTREME, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 5, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("extreme")); + e_widget_table_object_align_append(ol, ob, + 2, 5, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%.0f minutes"), 120.0, 2400.0, 1, 0, + &(cfdata->powersave_extreme), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 5, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + e_widget_toolbook_page_append(otb, NULL, _("Power managment"), ol, + 0, 0, 1, 1, 0.5, 0.5); + e_widget_toolbook_page_show(otb, 0); + e_dialog_resizable_set(cfd->dia, 1); + + return otb; +} + + +static void +_cb_min_changed(void *data, Evas_Object *obj __UNUSED__) +{ + E_Config_Dialog_Data *cfdata; + Evas_Object *o; + cfdata = data; + if (!cfdata) return; + if (cfdata->powersave_max < cfdata->powersave_min) + { + o = eina_list_nth(cfdata->gui.rmax, cfdata->powersave_min); + e_widget_radio_toggle_set(o, EINA_TRUE); + e_widget_change(o); + } + +} + +static void +_cb_max_changed(void *data, Evas_Object *obj __UNUSED__) +{ + E_Config_Dialog_Data *cfdata; + Evas_Object *o; + int toggle; + cfdata = data; + if (!cfdata) return; + if (cfdata->powersave_min > cfdata->powersave_max) + { + o = eina_list_nth(cfdata->gui.rmin, cfdata->powersave_max); + e_widget_radio_toggle_set(o, EINA_TRUE); + e_widget_change(o); + } +} diff --git a/src/modules/conf_performance/e_int_config_powermanagement.h b/src/modules/conf_performance/e_int_config_powermanagement.h new file mode 100644 index 000000000..1733a833d --- /dev/null +++ b/src/modules/conf_performance/e_int_config_powermanagement.h @@ -0,0 +1,9 @@ +#ifdef E_TYPEDEFS +#else +#ifndef E_INT_CONFIG_POWERMANAGEMENT_H +#define E_INT_CONFIG_POWERMANAGEMENT_H + +E_Config_Dialog *e_int_config_powermanagement(E_Container *con, const char *params __UNUSED__); + +#endif +#endif diff --git a/src/modules/conf_performance/e_mod_main.c b/src/modules/conf_performance/e_mod_main.c index b587ce117..13385067e 100644 --- a/src/modules/conf_performance/e_mod_main.c +++ b/src/modules/conf_performance/e_mod_main.c @@ -17,6 +17,7 @@ e_modapi_init(E_Module *m) e_configure_registry_category_add("advanced", 80, _("Advanced"), NULL, "preferences-advanced"); e_configure_registry_item_add("advanced/performance", 20, _("Performance"), NULL, "preferences-system-performance", e_int_config_performance); e_configure_registry_item_add("advanced/engine", 50, _("Engine"), NULL, "preferences-engine", e_int_config_engine); + e_configure_registry_item_add("advanced/powermanagement", 50, _("Power management"), NULL, "preferences-powermanagement", e_int_config_powermanagement); conf_module = m; e_module_delayed_set(m, 1); return m; @@ -30,6 +31,7 @@ e_modapi_shutdown(E_Module *m __UNUSED__) while ((cfd = e_config_dialog_get("E", "advanced/performance"))) e_object_del(E_OBJECT(cfd)); e_configure_registry_item_del("advanced/engine"); e_configure_registry_item_del("advanced/performance"); + e_configure_registry_item_del("advanced/powermanagement"); e_configure_registry_category_del("advanced"); conf_module = NULL; return 1; diff --git a/src/modules/conf_performance/e_mod_main.h b/src/modules/conf_performance/e_mod_main.h index 534a16a75..76d7d1f2e 100644 --- a/src/modules/conf_performance/e_mod_main.h +++ b/src/modules/conf_performance/e_mod_main.h @@ -8,6 +8,7 @@ #undef E_TYPEDEFS #include "e_int_config_performance.h" #include "e_int_config_engine.h" +#include "e_int_config_powermanagement.h" EAPI extern E_Module_Api e_modapi;