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);
12 static void _cb_backlight_slider_change(void *data, Evas_Object *obj);
14 static int _e_int_config_dpms_available(void);
15 static int _e_int_config_dpms_capable(void);
17 static void _cb_disable_changed(void *data, Evas_Object *obj);
19 struct _E_Config_Dialog_Data
23 Evas_Object *standby_slider;
24 Evas_Object *suspend_slider;
25 Evas_Object *off_slider;
26 Evas_Object *backlight_slider;
35 * The following timeouts are represented as minutes
36 * while the underlying e_config variables are in seconds
38 double standby_timeout;
39 double suspend_timeout;
43 double backlight_normal;
45 double backlight_timeout;
46 double backlight_transition;
49 /* static E_Dialog *dpms_dialog = NULL; */
51 /* always allow as dmps now has backlight too
53 _cb_dpms_dialog_ok(void *data __UNUSED__, E_Dialog *dia __UNUSED__)
55 e_object_del(E_OBJECT(dpms_dialog));
61 _e_int_config_dpms_capable(void)
64 /* always allow as dmps now has backlight too
65 * this all needs to merge with screensaver too into a simple screen blank+
66 * dim+brightness etc. config
67 if (ecore_x_dpms_capable_get()) return 1;
69 if (dpms_dialog) e_object_del(E_OBJECT(dpms_dialog));
70 dpms_dialog = e_dialog_new(e_container_current_get(e_manager_current_get()),
71 "E", "_dpms_capable_dialog");
72 if (!dpms_dialog) return 0;
74 e_dialog_title_set(dpms_dialog, _("Display Power Management Signaling"));
75 e_dialog_text_set(dpms_dialog, _("The current display server is not <br>"
77 e_dialog_icon_set(dpms_dialog, "preferences-system-power-management", 64);
78 e_dialog_button_add(dpms_dialog, _("OK"), NULL, _cb_dpms_dialog_ok, NULL);
79 e_dialog_button_focus_num(dpms_dialog, 1);
80 e_win_centered_set(dpms_dialog->win, 1);
81 e_dialog_show(dpms_dialog);
87 _e_int_config_dpms_available(void)
90 /* always allow as dmps now has backlight too
91 if (ecore_x_dpms_query()) return 1;
93 if (dpms_dialog) e_object_del(E_OBJECT(dpms_dialog));
94 dpms_dialog = e_dialog_new(e_container_current_get(e_manager_current_get()),
95 "E", "_dpms_available_dialog");
96 if (!dpms_dialog) return 0;
98 e_dialog_title_set(dpms_dialog, _("Display Power Management Signaling"));
99 e_dialog_text_set(dpms_dialog, _("The current display server does not <br>"
100 "have the DPMS extension."));
101 e_dialog_icon_set(dpms_dialog, "preferences-system-power-management", 64);
102 e_dialog_button_add(dpms_dialog, _("OK"), NULL, _cb_dpms_dialog_ok, NULL);
103 e_dialog_button_focus_num(dpms_dialog, 1);
104 e_win_centered_set(dpms_dialog->win, 1);
105 e_dialog_show(dpms_dialog);
111 e_int_config_dpms(E_Container *con, const char *params __UNUSED__)
113 E_Config_Dialog *cfd;
114 E_Config_Dialog_View *v;
116 if ((e_config_dialog_find("E", "screen/power_management")) ||
117 (!_e_int_config_dpms_available()) ||
118 (!_e_int_config_dpms_capable()))
121 v = E_NEW(E_Config_Dialog_View, 1);
123 v->create_cfdata = _create_data;
124 v->free_cfdata = _free_data;
125 v->basic.apply_cfdata = _advanced_apply_data;
126 v->basic.create_widgets = _advanced_create_widgets;
127 v->basic.check_changed = _advanced_check_changed;
128 v->override_auto_apply = 1;
130 cfd = e_config_dialog_new(con, _("Display Power Management Settings"), "E",
131 "screen/power_management", "preferences-system-power-management",
137 _fill_data(E_Config_Dialog_Data *cfdata)
139 cfdata->enable_dpms = e_config->dpms_enable;
140 cfdata->enable_standby = e_config->dpms_standby_enable;
141 cfdata->standby_timeout = e_config->dpms_standby_timeout / 60;
142 cfdata->enable_suspend = e_config->dpms_suspend_enable;
143 cfdata->suspend_timeout = e_config->dpms_suspend_timeout / 60;
144 cfdata->enable_off = e_config->dpms_off_enable;
145 cfdata->off_timeout = e_config->dpms_off_timeout / 60;
146 cfdata->backlight_normal = e_config->backlight.normal * 100.0;
147 cfdata->backlight_dim = e_config->backlight.dim * 100.0;
148 cfdata->backlight_transition = e_config->backlight.transition;
149 cfdata->enable_idle_dim = e_config->backlight.idle_dim;
150 cfdata->backlight_timeout = e_config->backlight.timer;
154 _list_disabled_state_apply(Eina_List *list, Eina_Bool disabled)
159 EINA_LIST_FOREACH(list, l, o)
160 e_widget_disabled_set(o, disabled);
164 _create_data(E_Config_Dialog *cfd)
166 E_Config_Dialog_Data *cfdata;
168 cfdata = E_NEW(E_Config_Dialog_Data, 1);
171 cfdata->standby_slider = NULL;
172 cfdata->suspend_slider = NULL;
173 cfdata->off_slider = NULL;
180 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
182 eina_list_free(cfdata->dpms_list);
187 _apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
189 e_config->dpms_enable = cfdata->enable_dpms;
190 e_config->dpms_standby_enable = cfdata->enable_standby;
191 e_config->dpms_suspend_enable = cfdata->enable_suspend;
192 e_config->dpms_off_enable = cfdata->enable_off;
194 e_config->dpms_standby_timeout = cfdata->standby_timeout * 60;
195 e_config->dpms_suspend_timeout = cfdata->suspend_timeout * 60;
196 e_config->dpms_off_timeout = cfdata->off_timeout * 60;
198 e_config->backlight.normal = cfdata->backlight_normal / 100.0;
199 e_config->backlight.dim = cfdata->backlight_dim / 100.0;
200 e_config->backlight.transition = cfdata->backlight_transition;
201 e_config->backlight.timer = cfdata->backlight_timeout;
203 e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_NORMAL);
204 e_backlight_level_set(NULL, e_config->backlight.normal, -1.0);
206 e_config_save_queue();
211 /* advanced window */
213 _advanced_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
215 return (e_config->dpms_enable != cfdata->enable_dpms) ||
216 (e_config->dpms_standby_enable != cfdata->enable_standby) ||
217 (e_config->dpms_suspend_enable != cfdata->enable_suspend) ||
218 (e_config->dpms_off_enable != cfdata->enable_off) ||
219 (e_config->dpms_standby_timeout / 60 != cfdata->standby_timeout) ||
220 (e_config->dpms_suspend_timeout / 60 != cfdata->suspend_timeout) ||
221 (e_config->dpms_off_timeout / 60 != cfdata->off_timeout) ||
222 (e_config->backlight.normal * 100.0 != cfdata->backlight_normal) ||
223 (e_config->backlight.dim * 100.0 != cfdata->backlight_dim) ||
224 (e_config->backlight.transition != cfdata->backlight_transition) ||
225 (e_config->backlight.timer != cfdata->backlight_timeout);
229 _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
231 _apply_data(cfd, cfdata);
236 _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
238 Evas_Object *o, *of, *ob, *otb;
239 Evas_Object *dpms_check;
241 otb = e_widget_toolbook_add(evas, (24 * e_scale), (24 * e_scale));
244 o = e_widget_list_add(evas, 0, 0);
246 dpms_check = e_widget_check_add(evas, _("Enable Display Power Management"),
247 &(cfdata->enable_dpms));
248 e_widget_list_object_append(o, dpms_check, 1, 1, 0);
250 of = e_widget_framelist_add(evas, _("Timers"), 0);
252 ob = e_widget_check_add(evas, _("Standby time"), &(cfdata->enable_standby));
253 e_widget_framelist_object_append(of, ob);
254 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
255 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
256 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0,
257 &(cfdata->standby_timeout), NULL, 100);
258 e_widget_on_change_hook_set(ob, _cb_standby_slider_change, cfdata);
259 cfdata->standby_slider = ob;
260 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
261 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
262 e_widget_framelist_object_append(of, ob);
264 ob = e_widget_check_add(evas, _("Suspend time"), &(cfdata->enable_suspend));
265 e_widget_framelist_object_append(of, ob);
266 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
267 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
268 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0,
269 &(cfdata->suspend_timeout), NULL, 100);
270 e_widget_on_change_hook_set(ob, _cb_suspend_slider_change, cfdata);
271 cfdata->suspend_slider = ob;
272 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
273 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
274 e_widget_framelist_object_append(of, ob);
276 ob = e_widget_check_add(evas, _("Off time"), &(cfdata->enable_off));
277 e_widget_framelist_object_append(of, ob);
278 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
279 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
280 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0,
281 &(cfdata->off_timeout), NULL, 100);
282 e_widget_on_change_hook_set(ob, _cb_off_slider_change, cfdata);
283 cfdata->off_slider = ob;
284 cfdata->dpms_list = eina_list_append(cfdata->dpms_list, ob);
285 e_widget_disabled_set(ob, !cfdata->enable_standby); // set state from saved config
286 e_widget_framelist_object_append(of, ob);
288 // handler for enable/disable widget array
289 e_widget_on_change_hook_set(dpms_check, _cb_disable_changed, cfdata->dpms_list);
290 // setting initial state
291 _list_disabled_state_apply(cfdata->dpms_list, !cfdata->enable_dpms);
293 e_widget_list_object_append(o, of, 1, 1, 0.5);
295 e_widget_toolbook_page_append(otb, NULL, _("DPMS"), o,
296 1, 0, 1, 0, 0.5, 0.0);
298 o = e_widget_list_add(evas, 0, 0);
300 ob = e_widget_label_add(evas, _("Normal Backlight"));
301 e_widget_list_object_append(o, ob, 1, 1, 0.5);
302 ob = e_widget_slider_add(evas, 1, 0, _("%3.0f"), 0.0, 100.0, 1.0, 0,
303 &(cfdata->backlight_normal), NULL, 100);
304 e_widget_list_object_append(o, ob, 1, 1, 0.5);
306 ob = e_widget_label_add(evas, _("Dim Backlight"));
307 e_widget_list_object_append(o, ob, 1, 1, 0.5);
308 ob = e_widget_slider_add(evas, 1, 0, _("%3.0f"), 0.0, 100.0, 1.0, 0,
309 &(cfdata->backlight_dim), NULL, 100);
310 e_widget_list_object_append(o, ob, 1, 1, 0.5);
312 ob = e_widget_check_add(evas, _("Idle Fade Time"), &(cfdata->enable_off));
313 e_widget_list_object_append(o, ob, 1, 1, 0.5);
314 e_widget_disabled_set(ob, cfdata->enable_idle_dim); // set state from saved config
315 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 0.5, 90.0, 1.0, 0,
316 &(cfdata->backlight_timeout), NULL, 100);
317 e_widget_on_change_hook_set(ob, _cb_backlight_slider_change, cfdata);
318 cfdata->backlight_slider = ob;
319 e_widget_disabled_set(ob, cfdata->enable_idle_dim); // set state from saved config
320 e_widget_list_object_append(o, ob, 1, 1, 0.5);
322 ob = e_widget_label_add(evas, _("Fade Time"));
323 e_widget_list_object_append(o, ob, 1, 1, 0.5);
324 ob = e_widget_slider_add(evas, 1, 0, _("%1.1f sec"), 0.0, 5.0, 0.1, 0,
325 &(cfdata->backlight_transition), NULL, 100);
326 e_widget_list_object_append(o, ob, 1, 1, 0.5);
328 e_widget_toolbook_page_append(otb, NULL, _("Backlight"), o,
329 1, 0, 1, 0, 0.5, 0.0);
331 e_widget_toolbook_page_show(otb, 0);
336 /* general functionality/callbacks */
338 _cb_standby_slider_change(void *data, Evas_Object *obj __UNUSED__)
340 E_Config_Dialog_Data *cfdata = data;
343 if (cfdata->standby_timeout > cfdata->suspend_timeout)
345 cfdata->suspend_timeout = cfdata->standby_timeout;
346 if (cfdata->suspend_slider)
347 e_widget_slider_value_double_set(cfdata->suspend_slider,
348 cfdata->suspend_timeout);
350 if (cfdata->suspend_timeout > cfdata->off_timeout)
352 cfdata->off_timeout = cfdata->suspend_timeout;
353 if (cfdata->off_slider)
354 e_widget_slider_value_double_set(cfdata->off_slider,
355 cfdata->off_timeout);
361 _cb_suspend_slider_change(void *data, Evas_Object *obj __UNUSED__)
363 E_Config_Dialog_Data *cfdata = data;
366 if (cfdata->suspend_timeout > cfdata->off_timeout)
368 cfdata->off_timeout = cfdata->suspend_timeout;
369 if (cfdata->off_slider)
370 e_widget_slider_value_double_set(cfdata->off_slider,
371 cfdata->off_timeout);
373 if (cfdata->suspend_timeout < cfdata->standby_timeout)
375 cfdata->standby_timeout = cfdata->suspend_timeout;
376 if (cfdata->standby_slider)
377 e_widget_slider_value_double_set(cfdata->standby_slider,
378 cfdata->standby_timeout);
383 _cb_backlight_slider_change(void *data, Evas_Object *obj __UNUSED__)
385 E_Config_Dialog_Data *cfdata = data;
388 if (cfdata->backlight_timeout < cfdata->suspend_timeout)
390 cfdata->suspend_timeout = cfdata->backlight_timeout;
391 if (cfdata->suspend_slider)
392 e_widget_slider_value_double_set(cfdata->suspend_slider,
393 cfdata->suspend_timeout);
395 if (cfdata->suspend_timeout < cfdata->backlight_timeout)
397 cfdata->backlight_timeout = cfdata->suspend_timeout;
398 if (cfdata->backlight_slider)
399 e_widget_slider_value_double_set(cfdata->backlight_slider,
400 cfdata->backlight_timeout);
403 e_backlight_update();
407 _cb_off_slider_change(void *data, Evas_Object *obj __UNUSED__)
409 E_Config_Dialog_Data *cfdata = data;
412 if (cfdata->off_timeout < cfdata->suspend_timeout)
414 cfdata->suspend_timeout = cfdata->off_timeout;
415 if (cfdata->suspend_slider)
416 e_widget_slider_value_double_set(cfdata->suspend_slider,
417 cfdata->suspend_timeout);
419 if (cfdata->suspend_timeout < cfdata->standby_timeout)
421 cfdata->standby_timeout = cfdata->suspend_timeout;
422 if (cfdata->standby_slider)
423 e_widget_slider_value_double_set(cfdata->standby_slider,
424 cfdata->standby_timeout);
430 * @param data A Eina_List of Evas_Object to chain widgets together with the checkbox
431 * @param obj A Evas_Object checkbox created with e_widget_check_add()
434 _cb_disable_changed(void *data, Evas_Object *obj)
436 _list_disabled_state_apply(data, !e_widget_check_checked_get(obj));