3 #define E_CONFIG_BLANKING_DEFAULT 2
4 #define E_CONFIG_BLANKING_PREFERRED 1
5 #define E_CONFIG_BLANKING_NOT_PREFERRED 0
7 #define E_CONFIG_EXPOSURES_DEFAULT 2
8 #define E_CONFIG_EXPOSURES_ALLOWED 1
9 #define E_CONFIG_EXPOSURES_NOT_ALLOWED 0
11 static void *_create_data(E_Config_Dialog *cfd);
12 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
13 static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
14 static int _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata);
15 static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
16 static void _cb_disable(void *data, Evas_Object *obj);
17 static void _cb_ask_presentation_changed(void *data, Evas_Object *obj);
19 struct _E_Config_Dialog_Data
23 int enable_screensaver;
25 int presentation_mode;
27 double ask_presentation_timeout;
29 int screensaver_suspend;
30 int screensaver_suspend_on_ac;
31 double screensaver_suspend_delay;
33 Eina_List *disable_list;
37 Evas_Object *ask_presentation_slider;
42 e_int_config_screensaver(E_Container *con, const char *params __UNUSED__)
45 E_Config_Dialog_View *v;
47 if (e_config_dialog_find("E", "screen/screen_saver")) return NULL;
48 v = E_NEW(E_Config_Dialog_View, 1);
50 v->create_cfdata = _create_data;
51 v->free_cfdata = _free_data;
52 v->basic.apply_cfdata = _basic_apply;
53 v->basic.create_widgets = _basic_create;
54 v->basic.check_changed = _basic_check_changed;
56 v->override_auto_apply = 1;
58 cfd = e_config_dialog_new(con,_("Screen Saver Settings"),
59 "E", "screen/screen_saver",
60 "preferences-desktop-screensaver", 0, v, NULL);
65 _fill_data(E_Config_Dialog_Data *cfdata)
67 cfdata->enable_screensaver = e_config->screensaver_enable;
68 cfdata->timeout = e_config->screensaver_timeout / 60;
69 cfdata->ask_presentation = e_config->screensaver_ask_presentation;
70 cfdata->presentation_mode = e_config->mode.presentation;
71 cfdata->ask_presentation_timeout = e_config->screensaver_ask_presentation_timeout;
72 cfdata->screensaver_suspend = e_config->screensaver_suspend;
73 cfdata->screensaver_suspend_on_ac = e_config->screensaver_suspend_on_ac;
74 cfdata->screensaver_suspend_delay = e_config->screensaver_suspend_delay;
78 _create_data(E_Config_Dialog *cfd)
80 E_Config_Dialog_Data *cfdata;
82 cfdata = E_NEW(E_Config_Dialog_Data, 1);
89 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
91 eina_list_free(cfdata->disable_list);
96 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
98 e_config->screensaver_enable = cfdata->enable_screensaver;
99 e_config->screensaver_timeout = (cfdata->timeout * 60);
100 e_config->screensaver_ask_presentation = cfdata->ask_presentation;
101 e_config->mode.presentation = cfdata->presentation_mode;
102 e_config->screensaver_ask_presentation_timeout = cfdata->ask_presentation_timeout;
103 e_config->screensaver_suspend = cfdata->screensaver_suspend;
104 e_config->screensaver_suspend_on_ac = cfdata->screensaver_suspend_on_ac;
105 e_config->screensaver_suspend_delay = cfdata->screensaver_suspend_delay;
107 // enough of dpms vs screensaver being different! useless
108 e_config->dpms_enable = e_config->screensaver_enable;
109 e_config->dpms_standby_enable = e_config->dpms_enable;
110 e_config->dpms_suspend_enable = e_config->dpms_enable;
111 e_config->dpms_off_enable = e_config->dpms_enable;
112 // XXX: 5 seconds after screenblank until dpms - enough for most anims;
113 e_config->dpms_standby_timeout = e_config->screensaver_timeout + 5;
114 e_config->dpms_suspend_timeout = e_config->screensaver_timeout + 6;
115 e_config->dpms_off_timeout = e_config->screensaver_timeout + 7;
117 e_config->screensaver_interval = 0;
120 e_screensaver_update();
123 e_config_save_queue();
128 _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
130 return ((e_config->screensaver_enable != cfdata->enable_screensaver) ||
131 (e_config->screensaver_timeout != (int)(cfdata->timeout * 60)) ||
132 (e_config->screensaver_ask_presentation != cfdata->ask_presentation) ||
133 (e_config->mode.presentation != cfdata->presentation_mode) ||
134 (e_config->screensaver_ask_presentation_timeout != cfdata->ask_presentation_timeout) ||
135 (e_config->screensaver_suspend != cfdata->screensaver_suspend) ||
136 (e_config->screensaver_suspend_on_ac != cfdata->screensaver_suspend_on_ac) ||
137 (e_config->screensaver_suspend_delay != cfdata->screensaver_suspend_delay));
141 _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
143 Evas_Object *otb, *ol, *ow;
145 otb = e_widget_toolbook_add(evas, (24 * e_scale), (24 * e_scale));
148 ol = e_widget_list_add(evas, 0, 0);
149 ow = e_widget_check_add(evas, _("Enable screen blanking"),
150 &(cfdata->enable_screensaver));
151 e_widget_on_change_hook_set(ow, _cb_disable, cfdata);
152 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
154 ow = e_widget_label_add(evas, _("Timeout"));
155 cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
156 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
157 ow = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"),
158 1.0, 90.0, 1.0, 0, &(cfdata->timeout), NULL, 100);
159 cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
160 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
162 ow = e_widget_check_add(evas, _("Suspend on blank"),
163 &(cfdata->screensaver_suspend));
164 cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
165 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
166 ow = e_widget_check_add(evas, _("Suspend even if AC"),
167 &(cfdata->screensaver_suspend_on_ac));
168 cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
169 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
171 ow = e_widget_label_add(evas, _("Suspend delay"));
172 cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
173 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
174 ow = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"),
175 1.0, 20.0, 1.0, 0, &(cfdata->screensaver_suspend_delay), NULL, 100);
176 cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
177 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
179 e_widget_toolbook_page_append(otb, NULL, _("Blanking"), ol,
180 1, 0, 1, 0, 0.5, 0.0);
182 ol = e_widget_list_add(evas, 0, 0);
183 ow = e_widget_check_add(evas, _("Presentation mode enabled"),
184 &(cfdata->presentation_mode));
185 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
186 ow = e_widget_check_add(evas, _("Suggest if deactivated before"),
187 &(cfdata->ask_presentation));
188 e_widget_on_change_hook_set(ow, _cb_ask_presentation_changed, cfdata);
189 cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
190 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
191 ow = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"),
193 &(cfdata->ask_presentation_timeout), NULL, 100);
194 cfdata->gui.ask_presentation_slider = ow;
195 cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
196 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
197 e_widget_toolbook_page_append(otb, NULL, _("Presentation"), ol,
198 1, 0, 1, 0, 0.5, 0.0);
200 e_widget_toolbook_page_show(otb, 0);
202 // handler for enable/disable widget array
203 _cb_disable(cfdata, NULL);
209 _cb_disable(void *data, Evas_Object *obj __UNUSED__)
211 E_Config_Dialog_Data *cfdata;
215 if (!(cfdata = data)) return;
216 EINA_LIST_FOREACH(cfdata->disable_list, l, o)
217 e_widget_disabled_set(o, !cfdata->enable_screensaver);
219 _cb_ask_presentation_changed(cfdata, NULL);
223 _cb_ask_presentation_changed(void *data, Evas_Object *obj __UNUSED__)
225 E_Config_Dialog_Data *cfdata;
228 if (!(cfdata = data)) return;
229 disable = ((!cfdata->enable_screensaver) || (!cfdata->ask_presentation));
230 e_widget_disabled_set(cfdata->gui.ask_presentation_slider, disable);