3 static void *_create_data(E_Config_Dialog *cfd);
4 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
5 static int _advanced_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
6 static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
7 static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas,
8 E_Config_Dialog_Data *cfdata);
9 static void _cb_standby_slider_change(void *data, Evas_Object *obj);
10 static void _cb_suspend_slider_change(void *data, Evas_Object *obj);
11 static void _cb_off_slider_change(void *data, Evas_Object *obj);
13 static int _e_int_config_dpms_available(void);
14 static int _e_int_config_dpms_capable(void);
16 static void _cb_disable_changed(void *data, Evas_Object *obj);
18 struct _E_Config_Dialog_Data
22 Evas_Object *standby_slider;
23 Evas_Object *suspend_slider;
24 Evas_Object *off_slider;
32 * The following timeouts are represented as minutes
33 * while the underlying e_config variables are in seconds
35 double standby_timeout;
36 double suspend_timeout;
41 static E_Dialog *dpms_dialog = NULL;
44 _cb_dpms_dialog_ok(void *data __UNUSED__, E_Dialog *dia __UNUSED__)
46 e_object_del(E_OBJECT(dpms_dialog));
51 _e_int_config_dpms_capable(void)
53 if (ecore_x_dpms_capable_get()) return 1;
55 if (dpms_dialog) e_object_del(E_OBJECT(dpms_dialog));
56 dpms_dialog = e_dialog_new(e_container_current_get(e_manager_current_get()),
57 "E", "_dpms_capable_dialog");
58 if (!dpms_dialog) return 0;
60 e_dialog_title_set(dpms_dialog, _("Display Power Management Signaling"));
61 e_dialog_text_set(dpms_dialog, _("The current display server is not <br>"
63 e_dialog_icon_set(dpms_dialog, "preferences-system-power-management", 64);
64 e_dialog_button_add(dpms_dialog, _("OK"), NULL, _cb_dpms_dialog_ok, NULL);
65 e_dialog_button_focus_num(dpms_dialog, 1);
66 e_win_centered_set(dpms_dialog->win, 1);
67 e_dialog_show(dpms_dialog);
72 _e_int_config_dpms_available(void)
74 if (ecore_x_dpms_query()) return 1;
76 if (dpms_dialog) e_object_del(E_OBJECT(dpms_dialog));
77 dpms_dialog = e_dialog_new(e_container_current_get(e_manager_current_get()),
78 "E", "_dpms_available_dialog");
79 if (!dpms_dialog) return 0;
81 e_dialog_title_set(dpms_dialog, _("Display Power Management Signaling"));
82 e_dialog_text_set(dpms_dialog, _("The current display server does not <br>"
83 "have the DPMS extension."));
84 e_dialog_icon_set(dpms_dialog, "preferences-system-power-management", 64);
85 e_dialog_button_add(dpms_dialog, _("OK"), NULL, _cb_dpms_dialog_ok, NULL);
86 e_dialog_button_focus_num(dpms_dialog, 1);
87 e_win_centered_set(dpms_dialog->win, 1);
88 e_dialog_show(dpms_dialog);
93 e_int_config_dpms(E_Container *con, const char *params __UNUSED__)
96 E_Config_Dialog_View *v;
98 if ((e_config_dialog_find("E", "screen/power_management")) ||
99 (!_e_int_config_dpms_available()) ||
100 (!_e_int_config_dpms_capable()))
103 v = E_NEW(E_Config_Dialog_View, 1);
105 v->create_cfdata = _create_data;
106 v->free_cfdata = _free_data;
107 v->basic.apply_cfdata = _advanced_apply_data;
108 v->basic.create_widgets = _advanced_create_widgets;
109 v->basic.check_changed = _advanced_check_changed;
110 v->override_auto_apply = 1;
112 cfd = e_config_dialog_new(con, _("Display Power Management Settings"), "E",
113 "screen/power_management", "preferences-system-power-management",
119 _fill_data(E_Config_Dialog_Data *cfdata)
121 cfdata->enable_dpms = e_config->dpms_enable;
122 cfdata->enable_standby = e_config->dpms_standby_enable;
123 cfdata->standby_timeout = e_config->dpms_standby_timeout / 60;
124 cfdata->enable_suspend = e_config->dpms_suspend_enable;
125 cfdata->suspend_timeout = e_config->dpms_suspend_timeout / 60;
126 cfdata->enable_off = e_config->dpms_off_enable;
127 cfdata->off_timeout = e_config->dpms_off_timeout / 60;
131 _list_disabled_state_apply(Eina_List *list, Eina_Bool disabled)
136 EINA_LIST_FOREACH(list, l, o)
137 e_widget_disabled_set(o, disabled);
141 _create_data(E_Config_Dialog *cfd)
143 E_Config_Dialog_Data *cfdata;
145 cfdata = E_NEW(E_Config_Dialog_Data, 1);
148 cfdata->standby_slider = NULL;
149 cfdata->suspend_slider = NULL;
150 cfdata->off_slider = NULL;
157 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
159 eina_list_free(cfdata->dpms_list);
164 _apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
166 e_config->dpms_enable = cfdata->enable_dpms;
167 e_config->dpms_standby_enable = cfdata->enable_standby;
168 e_config->dpms_suspend_enable = cfdata->enable_suspend;
169 e_config->dpms_off_enable = cfdata->enable_off;
171 e_config->dpms_standby_timeout = cfdata->standby_timeout * 60;
172 e_config->dpms_suspend_timeout = cfdata->suspend_timeout * 60;
173 e_config->dpms_off_timeout = cfdata->off_timeout * 60;
175 e_config_save_queue();
180 /* advanced window */
182 _advanced_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
184 return (e_config->dpms_enable != cfdata->enable_dpms) ||
185 (e_config->dpms_standby_enable != cfdata->enable_standby) ||
186 (e_config->dpms_suspend_enable != cfdata->enable_suspend) ||
187 (e_config->dpms_off_enable != cfdata->enable_off) ||
188 (e_config->dpms_standby_timeout / 60 != cfdata->standby_timeout) ||
189 (e_config->dpms_suspend_timeout / 60 != cfdata->suspend_timeout) ||
190 (e_config->dpms_off_timeout / 60 != cfdata->off_timeout);
194 _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
196 _apply_data(cfd, cfdata);
201 _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
203 Evas_Object *o, *of, *ob;
204 Evas_Object *dpms_check;
206 o = e_widget_list_add(evas, 0, 0);
208 dpms_check = e_widget_check_add(evas, _("Enable Display Power Management"),
209 &(cfdata->enable_dpms));
210 e_widget_list_object_append(o, dpms_check, 1, 1, 0);
212 of = e_widget_framelist_add(evas, _("Timers"), 0);
214 ob = e_widget_check_add(evas, _("Standby time"), &(cfdata->enable_standby));
215 e_widget_framelist_object_append(of, ob);
216 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
217 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
218 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0,
219 &(cfdata->standby_timeout), NULL, 100);
220 e_widget_on_change_hook_set(ob, _cb_standby_slider_change, cfdata);
221 cfdata->standby_slider = ob;
222 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
223 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
224 e_widget_framelist_object_append(of, ob);
226 ob = e_widget_check_add(evas, _("Suspend time"), &(cfdata->enable_suspend));
227 e_widget_framelist_object_append(of, ob);
228 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
229 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
230 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0,
231 &(cfdata->suspend_timeout), NULL, 100);
232 e_widget_on_change_hook_set(ob, _cb_suspend_slider_change, cfdata);
233 cfdata->suspend_slider = ob;
234 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
235 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
236 e_widget_framelist_object_append(of, ob);
238 ob = e_widget_check_add(evas, _("Off time"), &(cfdata->enable_off));
239 e_widget_framelist_object_append(of, ob);
240 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
241 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
242 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0,
243 &(cfdata->off_timeout), NULL, 100);
244 e_widget_on_change_hook_set(ob, _cb_off_slider_change, cfdata);
245 cfdata->off_slider = ob;
246 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
247 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
248 e_widget_framelist_object_append(of, ob);
250 // handler for enable/disable widget array
251 e_widget_on_change_hook_set(dpms_check, _cb_disable_changed, cfdata->dpms_list);
252 // setting initial state
253 _list_disabled_state_apply(cfdata->dpms_list, !cfdata->enable_dpms);
255 e_widget_list_object_append(o, of, 1, 1, 0.5);
259 /* general functionality/callbacks */
261 _cb_standby_slider_change(void *data, Evas_Object *obj __UNUSED__)
263 E_Config_Dialog_Data *cfdata = data;
266 if (cfdata->standby_timeout > cfdata->suspend_timeout)
268 cfdata->suspend_timeout = cfdata->standby_timeout;
269 if (cfdata->suspend_slider)
270 e_widget_slider_value_double_set(cfdata->suspend_slider,
271 cfdata->suspend_timeout);
273 if (cfdata->suspend_timeout > cfdata->off_timeout)
275 cfdata->off_timeout = cfdata->suspend_timeout;
276 if (cfdata->off_slider)
277 e_widget_slider_value_double_set(cfdata->off_slider,
278 cfdata->off_timeout);
284 _cb_suspend_slider_change(void *data, Evas_Object *obj __UNUSED__)
286 E_Config_Dialog_Data *cfdata = data;
289 if (cfdata->suspend_timeout > cfdata->off_timeout)
291 cfdata->off_timeout = cfdata->suspend_timeout;
292 if (cfdata->off_slider)
293 e_widget_slider_value_double_set(cfdata->off_slider,
294 cfdata->off_timeout);
296 if (cfdata->suspend_timeout < cfdata->standby_timeout)
298 cfdata->standby_timeout = cfdata->suspend_timeout;
299 if (cfdata->standby_slider)
300 e_widget_slider_value_double_set(cfdata->standby_slider,
301 cfdata->standby_timeout);
306 _cb_off_slider_change(void *data, Evas_Object *obj __UNUSED__)
308 E_Config_Dialog_Data *cfdata = data;
311 if (cfdata->off_timeout < cfdata->suspend_timeout)
313 cfdata->suspend_timeout = cfdata->off_timeout;
314 if (cfdata->suspend_slider)
315 e_widget_slider_value_double_set(cfdata->suspend_slider,
316 cfdata->suspend_timeout);
318 if (cfdata->suspend_timeout < cfdata->standby_timeout)
320 cfdata->standby_timeout = cfdata->suspend_timeout;
321 if (cfdata->standby_slider)
322 e_widget_slider_value_double_set(cfdata->standby_slider,
323 cfdata->standby_timeout);
329 * @param data A Eina_List of Evas_Object to chain widgets together with the checkbox
330 * @param obj A Evas_Object checkbox created with e_widget_check_add()
333 _cb_disable_changed(void *data, Evas_Object *obj)
335 _list_disabled_state_apply(data, !e_widget_check_checked_get(obj));