summaryrefslogtreecommitdiff
path: root/src/modules/conf_performance
diff options
context:
space:
mode:
authorMichael BOUCHAUD <michael.bouchaud@gmail.com>2012-05-03 20:16:34 +0000
committerMichael BOUCHAUD <michael.bouchaud@gmail.com>2012-05-03 20:16:34 +0000
commit7743a24db235b62a3860cce9000d7171b851eabf (patch)
tree1f59016ee3853163a35ab7dd127feba4d25fe8c0 /src/modules/conf_performance
parentbce6efef04b122c699608989f47b2e612bced037 (diff)
downloadenlightenment-7743a24db235b62a3860cce9000d7171b851eabf.tar.gz
e: make e_powersave values configurable
SVN revision: 70698
Diffstat (limited to 'src/modules/conf_performance')
-rw-r--r--src/modules/conf_performance/Makefile.am4
-rw-r--r--src/modules/conf_performance/e_int_config_powermanagement.c372
-rw-r--r--src/modules/conf_performance/e_int_config_powermanagement.h9
-rw-r--r--src/modules/conf_performance/e_mod_main.c2
-rw-r--r--src/modules/conf_performance/e_mod_main.h1
5 files changed, 387 insertions, 1 deletions
diff --git a/src/modules/conf_performance/Makefile.am b/src/modules/conf_performance/Makefile.am
index d403d1f0a0..a6c688cc23 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 0000000000..a8a574517e
--- /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 0000000000..1733a833da
--- /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 b587ce117c..13385067e4 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 534a16a754..76d7d1f2ea 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;