3 static Ecore_Event_Handler *_e_screensaver_handler_config_mode = NULL;
4 static Ecore_Event_Handler *_e_screensaver_handler_screensaver_notify = NULL;
5 static Ecore_Event_Handler *_e_screensaver_handler_border_fullscreen = NULL;
6 static Ecore_Event_Handler *_e_screensaver_handler_border_unfullscreen = NULL;
7 static Ecore_Event_Handler *_e_screensaver_handler_border_remove = NULL;
8 static Ecore_Event_Handler *_e_screensaver_handler_border_iconify = NULL;
9 static Ecore_Event_Handler *_e_screensaver_handler_border_uniconify = NULL;
10 static Ecore_Event_Handler *_e_screensaver_handler_border_desk_set = NULL;
11 static Ecore_Event_Handler *_e_screensaver_handler_desk_show = NULL;
12 static Ecore_Event_Handler *_e_screensaver_handler_powersave = NULL;
13 static E_Dialog *_e_screensaver_ask_presentation_dia = NULL;
14 static int _e_screensaver_ask_presentation_count = 0;
16 static int _e_screensaver_timeout = 0;
17 static int _e_screensaver_interval = 0;
18 static int _e_screensaver_blanking = 0;
19 static int _e_screensaver_expose = 0;
21 static Ecore_Timer *_e_screensaver_suspend_timer = NULL;
22 static Eina_Bool _e_screensaver_on = EINA_FALSE;
25 e_screensaver_update(void)
27 int timeout = 0, interval = 0, blanking = 0, expose = 0;
28 int count = (1 + _e_screensaver_ask_presentation_count);
29 Eina_Bool changed = EINA_FALSE;
31 if ((e_config->screensaver_enable) && (!e_config->mode.presentation) &&
32 (!e_util_fullscreen_curreny_any()))
33 timeout = e_config->screensaver_timeout * count;
35 interval = e_config->screensaver_interval;
36 blanking = e_config->screensaver_blanking;
37 expose = e_config->screensaver_expose;
39 if (_e_screensaver_timeout != timeout)
41 _e_screensaver_timeout = timeout;
44 if (_e_screensaver_interval != interval)
46 _e_screensaver_interval = interval;
49 if (_e_screensaver_blanking != blanking)
51 _e_screensaver_blanking = blanking;
54 if (_e_screensaver_expose != expose)
56 _e_screensaver_expose = expose;
60 if (changed) ecore_x_screensaver_set(timeout, interval, blanking, expose);
64 e_screensaver_force_update(void)
66 int timeout = 0, count = (1 + _e_screensaver_ask_presentation_count);
68 if ((e_config->screensaver_enable) && (!e_config->mode.presentation) &&
69 (!e_util_fullscreen_curreny_any()))
70 timeout = e_config->screensaver_timeout * count;
71 ecore_x_screensaver_set(timeout + 10,
72 e_config->screensaver_interval + 10,
73 !e_config->screensaver_blanking,
74 !e_config->screensaver_expose);
75 ecore_x_screensaver_set(timeout,
76 e_config->screensaver_interval,
77 e_config->screensaver_blanking,
78 e_config->screensaver_expose);
82 _e_screensaver_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
84 e_screensaver_update();
85 return ECORE_CALLBACK_PASS_ON;
89 _e_screensaver_ask_presentation_del(void *data)
91 if (_e_screensaver_ask_presentation_dia == data)
92 _e_screensaver_ask_presentation_dia = NULL;
96 _e_screensaver_ask_presentation_yes(void *data __UNUSED__, E_Dialog *dia)
98 e_config->mode.presentation = 1;
99 e_config_mode_changed();
100 e_config_save_queue();
101 e_object_del(E_OBJECT(dia));
102 _e_screensaver_ask_presentation_count = 0;
106 _e_screensaver_ask_presentation_no(void *data __UNUSED__, E_Dialog *dia)
108 e_object_del(E_OBJECT(dia));
109 _e_screensaver_ask_presentation_count = 0;
113 _e_screensaver_ask_presentation_no_increase(void *data __UNUSED__, E_Dialog *dia)
115 _e_screensaver_ask_presentation_count++;
116 e_screensaver_update();
117 e_object_del(E_OBJECT(dia));
121 _e_screensaver_ask_presentation_no_forever(void *data __UNUSED__, E_Dialog *dia)
123 e_config->screensaver_ask_presentation = 0;
124 e_config_save_queue();
125 e_object_del(E_OBJECT(dia));
126 _e_screensaver_ask_presentation_count = 0;
130 _e_screensaver_ask_presentation_key_down(void *data, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event)
132 Evas_Event_Key_Down *ev = event;
133 E_Dialog *dia = data;
135 if (strcmp(ev->keyname, "Return") == 0)
136 _e_screensaver_ask_presentation_yes(NULL, dia);
137 else if (strcmp(ev->keyname, "Escape") == 0)
138 _e_screensaver_ask_presentation_no(NULL, dia);
142 _e_screensaver_ask_presentation_mode(void)
148 if (_e_screensaver_ask_presentation_dia) return;
150 if (!(man = e_manager_current_get())) return;
151 if (!(con = e_container_current_get(man))) return;
152 if (!(dia = e_dialog_new(con, "E", "_screensaver_ask_presentation"))) return;
154 e_dialog_title_set(dia, _("Activate Presentation Mode?"));
155 e_dialog_icon_set(dia, "dialog-ask", 64);
156 e_dialog_text_set(dia,
157 _("You disabled screensaver too fast.<br><br>"
158 "Would you like to enable <b>presentation</b> mode and "
159 "temporarily disable screen saver, lock and power saving?"));
161 e_object_del_attach_func_set(E_OBJECT(dia),
162 _e_screensaver_ask_presentation_del);
163 e_dialog_button_add(dia, _("Yes"), NULL,
164 _e_screensaver_ask_presentation_yes, NULL);
165 e_dialog_button_add(dia, _("No"), NULL,
166 _e_screensaver_ask_presentation_no, NULL);
167 e_dialog_button_add(dia, _("No, but increase timeout"), NULL,
168 _e_screensaver_ask_presentation_no_increase, NULL);
169 e_dialog_button_add(dia, _("No, and stop asking"), NULL,
170 _e_screensaver_ask_presentation_no_forever, NULL);
172 e_dialog_button_focus_num(dia, 0);
173 e_widget_list_homogeneous_set(dia->box_object, 0);
174 e_win_centered_set(dia->win, 1);
177 evas_object_event_callback_add(dia->bg_object, EVAS_CALLBACK_KEY_DOWN,
178 _e_screensaver_ask_presentation_key_down, dia);
180 _e_screensaver_ask_presentation_dia = dia;
184 _e_screensaver_suspend_cb(void *data __UNUSED__)
186 _e_screensaver_suspend_timer = NULL;
187 if (e_config->screensaver_suspend)
189 if ((e_config->screensaver_suspend_on_ac) ||
190 (e_powersave_mode_get() > E_POWERSAVE_MODE_LOW))
191 e_sys_action_do(E_SYS_SUSPEND, NULL);
197 _e_screensaver_handler_powersave_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
199 if ((e_config->screensaver_suspend) && (_e_screensaver_on))
201 if (_e_screensaver_suspend_timer)
202 ecore_timer_del(_e_screensaver_suspend_timer);
203 _e_screensaver_suspend_timer =
204 ecore_timer_add(e_config->screensaver_suspend_delay,
205 _e_screensaver_suspend_cb, NULL);
207 return ECORE_CALLBACK_PASS_ON;
211 _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
213 Ecore_X_Event_Screensaver_Notify *e = event;
214 static double last_start = 0.0;
218 _e_screensaver_on = EINA_TRUE;
219 if (_e_screensaver_suspend_timer)
221 ecore_timer_del(_e_screensaver_suspend_timer);
222 _e_screensaver_suspend_timer = NULL;
224 if (e_config->screensaver_suspend)
225 _e_screensaver_suspend_timer =
226 ecore_timer_add(e_config->screensaver_suspend_delay,
227 _e_screensaver_suspend_cb, NULL);
231 e_screensaver_force_update();
232 e_dpms_force_update();
234 _e_screensaver_on = EINA_FALSE;
235 if (_e_screensaver_suspend_timer)
237 ecore_timer_del(_e_screensaver_suspend_timer);
238 _e_screensaver_suspend_timer = NULL;
244 last_start = ecore_loop_time_get();
245 _e_screensaver_ask_presentation_count = 0;
247 else if ((last_start > 0.0) && (e_config->screensaver_ask_presentation))
249 double current = ecore_loop_time_get();
251 if (last_start + e_config->screensaver_ask_presentation_timeout >= current)
252 _e_screensaver_ask_presentation_mode();
255 else if (_e_screensaver_ask_presentation_count)
256 _e_screensaver_ask_presentation_count = 0;
258 return ECORE_CALLBACK_PASS_ON;
262 _e_screensaver_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
264 e_screensaver_update();
265 return ECORE_CALLBACK_PASS_ON;
269 _e_screensaver_handler_border_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
271 e_screensaver_update();
272 return ECORE_CALLBACK_PASS_ON;
276 _e_screensaver_handler_desk_show_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
278 e_screensaver_update();
279 return ECORE_CALLBACK_PASS_ON;
283 e_screensaver_init(void)
285 _e_screensaver_handler_config_mode = ecore_event_handler_add
286 (E_EVENT_CONFIG_MODE_CHANGED, _e_screensaver_handler_config_mode_cb, NULL);
288 _e_screensaver_handler_screensaver_notify = ecore_event_handler_add
289 (ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_screensaver_handler_screensaver_notify_cb, NULL);
291 _e_screensaver_handler_border_fullscreen = ecore_event_handler_add
292 (E_EVENT_BORDER_FULLSCREEN, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
294 _e_screensaver_handler_border_unfullscreen = ecore_event_handler_add
295 (E_EVENT_BORDER_UNFULLSCREEN, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
297 _e_screensaver_handler_border_remove = ecore_event_handler_add
298 (E_EVENT_BORDER_REMOVE, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
300 _e_screensaver_handler_border_iconify = ecore_event_handler_add
301 (E_EVENT_BORDER_ICONIFY, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
303 _e_screensaver_handler_border_uniconify = ecore_event_handler_add
304 (E_EVENT_BORDER_UNICONIFY, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
306 _e_screensaver_handler_border_desk_set = ecore_event_handler_add
307 (E_EVENT_BORDER_DESK_SET, _e_screensaver_handler_border_desk_set_cb, NULL);
309 _e_screensaver_handler_desk_show = ecore_event_handler_add
310 (E_EVENT_DESK_SHOW, _e_screensaver_handler_desk_show_cb, NULL);
312 _e_screensaver_handler_powersave = ecore_event_handler_add
313 (E_EVENT_POWERSAVE_UPDATE, _e_screensaver_handler_powersave_cb, NULL);
315 _e_screensaver_timeout = ecore_x_screensaver_timeout_get();
316 _e_screensaver_interval = ecore_x_screensaver_interval_get();
317 _e_screensaver_blanking = ecore_x_screensaver_blank_get();
318 _e_screensaver_expose = ecore_x_screensaver_expose_get();
320 e_screensaver_update();
326 e_screensaver_shutdown(void)
328 if (_e_screensaver_suspend_timer)
330 ecore_timer_del(_e_screensaver_suspend_timer);
331 _e_screensaver_suspend_timer = NULL;
334 if (_e_screensaver_handler_powersave)
336 ecore_event_handler_del(_e_screensaver_handler_powersave);
337 _e_screensaver_handler_powersave = NULL;
340 if (_e_screensaver_handler_config_mode)
342 ecore_event_handler_del(_e_screensaver_handler_config_mode);
343 _e_screensaver_handler_config_mode = NULL;
346 if (_e_screensaver_handler_screensaver_notify)
348 ecore_event_handler_del(_e_screensaver_handler_screensaver_notify);
349 _e_screensaver_handler_screensaver_notify = NULL;
352 if (_e_screensaver_handler_border_fullscreen)
354 ecore_event_handler_del(_e_screensaver_handler_border_fullscreen);
355 _e_screensaver_handler_border_fullscreen = NULL;
358 if (_e_screensaver_handler_border_unfullscreen)
360 ecore_event_handler_del(_e_screensaver_handler_border_unfullscreen);
361 _e_screensaver_handler_border_unfullscreen = NULL;
364 if (_e_screensaver_handler_border_remove)
366 ecore_event_handler_del(_e_screensaver_handler_border_remove);
367 _e_screensaver_handler_border_remove = NULL;
370 if (_e_screensaver_handler_border_iconify)
372 ecore_event_handler_del(_e_screensaver_handler_border_iconify);
373 _e_screensaver_handler_border_iconify = NULL;
376 if (_e_screensaver_handler_border_uniconify)
378 ecore_event_handler_del(_e_screensaver_handler_border_uniconify);
379 _e_screensaver_handler_border_uniconify = NULL;
382 if (_e_screensaver_handler_border_desk_set)
384 ecore_event_handler_del(_e_screensaver_handler_border_desk_set);
385 _e_screensaver_handler_border_desk_set = NULL;
388 if (_e_screensaver_handler_desk_show)
390 ecore_event_handler_del(_e_screensaver_handler_desk_show);
391 _e_screensaver_handler_desk_show = NULL;