1 #include "e.h"
2
3 static Ecore_Event_Handler *_e_screensaver_handler_on = NULL;
4 static Ecore_Event_Handler *_e_screensaver_handler_off = NULL;
5 static Ecore_Event_Handler *_e_screensaver_handler_config_mode = NULL;
6 static Ecore_Event_Handler *_e_screensaver_handler_border_fullscreen = NULL;
7 static Ecore_Event_Handler *_e_screensaver_handler_border_unfullscreen = NULL;
8 static Ecore_Event_Handler *_e_screensaver_handler_border_remove = NULL;
9 static Ecore_Event_Handler *_e_screensaver_handler_border_iconify = NULL;
10 static Ecore_Event_Handler *_e_screensaver_handler_border_uniconify = NULL;
11 static Ecore_Event_Handler *_e_screensaver_handler_border_desk_set = NULL;
12 static Ecore_Event_Handler *_e_screensaver_handler_desk_show = NULL;
13 static Ecore_Event_Handler *_e_screensaver_handler_powersave = NULL;
14 static E_Dialog *_e_screensaver_ask_presentation_dia = NULL;
15 static int _e_screensaver_ask_presentation_count = 0;
16
17 static int _e_screensaver_timeout = 0;
18 static int _e_screensaver_blanking = 0;
19 static int _e_screensaver_expose = 0;
20
21 static Ecore_Timer *_e_screensaver_suspend_timer = NULL;
22 static Eina_Bool _e_screensaver_on = EINA_FALSE;
23
24 static Ecore_Timer *screensaver_idle_timer = NULL;
25 static Eina_Bool screensaver_dimmed = EINA_FALSE;
26
27 static Eina_Bool _screensaver_ignore = EINA_FALSE;
28 static Eina_Bool _screensaver_now = EINA_FALSE;
29
30 E_API int E_EVENT_SCREENSAVER_ON = -1;
31 E_API int E_EVENT_SCREENSAVER_OFF = -1;
32 E_API int E_EVENT_SCREENSAVER_OFF_PRE = -1;
33
34 E_API int
e_screensaver_timeout_get(Eina_Bool use_idle)35 e_screensaver_timeout_get(Eina_Bool use_idle)
36 {
37 int timeout = 0, count = (1 + _e_screensaver_ask_presentation_count);
38 Eina_Bool use_special_instead_of_dim = EINA_FALSE;
39
40 if (_screensaver_now) return 1;
41 if ((e_config->screensaver_enable) && (!e_config->mode.presentation))
42 {
43 if ((e_desklock_state_get()) &&
44 (e_config->screensaver_desklock_timeout > 0))
45 {
46 timeout = e_config->screensaver_desklock_timeout;
47 use_special_instead_of_dim = EINA_TRUE;
48 }
49 else
50 timeout = e_config->screensaver_timeout * count;
51 }
52
53 if ((use_idle) && (!e_config->mode.presentation) &&
54 (!use_special_instead_of_dim))
55 {
56 if (e_config->backlight.idle_dim)
57 {
58 double t2 = e_config->backlight.timer;
59
60 if ((e_powersave_mode_get() > E_POWERSAVE_MODE_LOW) &&
61 (e_config->backlight.battery_timer > 0.0))
62 t2 = e_config->backlight.battery_timer;
63 if (timeout > 0)
64 {
65 if (t2 < timeout) timeout = t2;
66 }
67 else timeout = t2;
68 }
69 }
70 return timeout;
71 }
72
73 E_API void
e_screensaver_ignore(void)74 e_screensaver_ignore(void)
75 {
76 _screensaver_ignore = EINA_TRUE;
77 }
78
79 E_API void
e_screensaver_unignore(void)80 e_screensaver_unignore(void)
81 {
82 _screensaver_ignore = EINA_FALSE;
83 }
84
85 E_API Eina_Bool
e_screensaver_ignore_get(void)86 e_screensaver_ignore_get(void)
87 {
88 return _screensaver_ignore;
89 }
90
91 E_API void
e_screensaver_update(void)92 e_screensaver_update(void)
93 {
94 int timeout, interval = 0, blanking = 0, expose = 0;
95 Eina_Bool changed = EINA_FALSE;
96
97 timeout = e_screensaver_timeout_get(EINA_TRUE);
98 if (!((e_config->screensaver_enable) &&
99 (!e_config->mode.presentation) &&
100 (!((e_util_fullscreen_current_any()) &&
101 (e_config->no_dpms_on_fullscreen)))))
102 timeout = 0;
103
104 if (_e_screensaver_timeout != timeout)
105 {
106 _e_screensaver_timeout = timeout;
107 changed = EINA_TRUE;
108 }
109
110 interval = e_config->screensaver_interval;
111 blanking = e_config->screensaver_blanking;
112 expose = e_config->screensaver_expose;
113
114 if (_e_screensaver_blanking != blanking)
115 {
116 _e_screensaver_blanking = blanking;
117 changed = EINA_TRUE;
118 }
119 if (_e_screensaver_expose != expose)
120 {
121 _e_screensaver_expose = expose;
122 changed = EINA_TRUE;
123 }
124
125 if (changed)
126 {
127 #ifndef HAVE_WAYLAND_ONLY
128 if (e_comp->comp_type != E_PIXMAP_TYPE_WL)
129 {
130 // this toggling of dpms is a bug workaround in x that i found
131 // where if we change screensaver timeouts and force a manual
132 // wake of the screen e.g. on lid open/close we have to toggle
133 // it for x to stop thinking the monitor is off when it's
134 // actually on and this causes later dpms issues where the
135 // screen doesn't turn off at all because x thinks internally
136 // that the monitor is still off... so this is odd, but it's
137 // necessary on some hardware.
138 if (!e_config->screensaver_dpms_off)
139 {
140 int enabled;
141
142 enabled = ((e_config->screensaver_enable) &&
143 (!e_config->mode.presentation));
144 ecore_x_dpms_enabled_set(!enabled);
145 ecore_x_dpms_enabled_set(enabled);
146 }
147 ecore_x_screensaver_set(timeout, interval, blanking, expose);
148 }
149 #endif
150 }
151 }
152
153 static Eina_Bool
_e_screensaver_handler_config_mode_cb(void * data EINA_UNUSED,int type EINA_UNUSED,void * event EINA_UNUSED)154 _e_screensaver_handler_config_mode_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
155 {
156 e_screensaver_update();
157 return ECORE_CALLBACK_PASS_ON;
158 }
159
160 static void
_e_screensaver_ask_presentation_del(void * data)161 _e_screensaver_ask_presentation_del(void *data)
162 {
163 if (_e_screensaver_ask_presentation_dia == data)
164 _e_screensaver_ask_presentation_dia = NULL;
165 }
166
167 static void
_e_screensaver_ask_presentation_yes(void * data EINA_UNUSED,E_Dialog * dia)168 _e_screensaver_ask_presentation_yes(void *data EINA_UNUSED, E_Dialog *dia)
169 {
170 e_config->mode.presentation = 1;
171 e_config_mode_changed();
172 e_config_save_queue();
173 e_object_del(E_OBJECT(dia));
174 _e_screensaver_ask_presentation_count = 0;
175 }
176
177 static void
_e_screensaver_ask_presentation_no(void * data EINA_UNUSED,E_Dialog * dia)178 _e_screensaver_ask_presentation_no(void *data EINA_UNUSED, E_Dialog *dia)
179 {
180 e_object_del(E_OBJECT(dia));
181 _e_screensaver_ask_presentation_count = 0;
182 }
183
184 static void
_e_screensaver_ask_presentation_no_increase(void * data EINA_UNUSED,E_Dialog * dia)185 _e_screensaver_ask_presentation_no_increase(void *data EINA_UNUSED, E_Dialog *dia)
186 {
187 _e_screensaver_ask_presentation_count++;
188 e_screensaver_update();
189 e_object_del(E_OBJECT(dia));
190 }
191
192 static void
_e_screensaver_ask_presentation_no_forever(void * data EINA_UNUSED,E_Dialog * dia)193 _e_screensaver_ask_presentation_no_forever(void *data EINA_UNUSED, E_Dialog *dia)
194 {
195 e_config->screensaver_ask_presentation = 0;
196 e_config_save_queue();
197 e_object_del(E_OBJECT(dia));
198 _e_screensaver_ask_presentation_count = 0;
199 }
200
201 static void
_e_screensaver_ask_presentation_key_down(void * data,Evas * e EINA_UNUSED,Evas_Object * o EINA_UNUSED,void * event)202 _e_screensaver_ask_presentation_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *o EINA_UNUSED, void *event)
203 {
204 Evas_Event_Key_Down *ev = event;
205 E_Dialog *dia = data;
206
207 if (strcmp(ev->key, "Return") == 0)
208 _e_screensaver_ask_presentation_yes(NULL, dia);
209 else if (strcmp(ev->key, "Escape") == 0)
210 _e_screensaver_ask_presentation_no(NULL, dia);
211 }
212
213 static void
_e_screensaver_ask_presentation_mode(void)214 _e_screensaver_ask_presentation_mode(void)
215 {
216 E_Dialog *dia;
217
218 if (_e_screensaver_ask_presentation_dia) return;
219
220 if (!(dia = e_dialog_new(NULL, "E", "_screensaver_ask_presentation"))) return;
221
222 e_dialog_title_set(dia, _("Activate Presentation Mode?"));
223 e_dialog_icon_set(dia, "dialog-ask", 64);
224 e_dialog_text_set(dia,
225 _("You disabled the screensaver too fast.<ps/><ps/>"
226 "Would you like to enable <b>presentation</b> mode and "
227 "temporarily disable screen saver, lock and power saving?"));
228
229 e_object_del_attach_func_set(E_OBJECT(dia),
230 _e_screensaver_ask_presentation_del);
231 e_dialog_button_add(dia, _("Yes"), NULL,
232 _e_screensaver_ask_presentation_yes, NULL);
233 e_dialog_button_add(dia, _("No"), NULL,
234 _e_screensaver_ask_presentation_no, NULL);
235 e_dialog_button_add(dia, _("No, but increase timeout"), NULL,
236 _e_screensaver_ask_presentation_no_increase, NULL);
237 e_dialog_button_add(dia, _("No, and stop asking"), NULL,
238 _e_screensaver_ask_presentation_no_forever, NULL);
239
240 e_dialog_button_focus_num(dia, 0);
241 e_widget_list_homogeneous_set(dia->box_object, 0);
242 elm_win_center(dia->win, 1, 1);
243 e_dialog_show(dia);
244
245 evas_object_event_callback_add(dia->bg_object, EVAS_CALLBACK_KEY_DOWN,
246 _e_screensaver_ask_presentation_key_down, dia);
247
248 _e_screensaver_ask_presentation_dia = dia;
249 }
250
251 static Eina_Bool
_e_screensaver_suspend_cb(void * data EINA_UNUSED)252 _e_screensaver_suspend_cb(void *data EINA_UNUSED)
253 {
254 _e_screensaver_suspend_timer = NULL;
255 if (e_config->screensaver_suspend)
256 {
257 if ((e_config->screensaver_suspend_on_ac) ||
258 (e_powersave_mode_get() > E_POWERSAVE_MODE_LOW))
259 {
260 if (e_config->screensaver_hibernate)
261 e_sys_action_do(E_SYS_HIBERNATE, NULL);
262 else
263 e_sys_action_do(E_SYS_SUSPEND, NULL);
264 }
265 }
266 return EINA_FALSE;
267 }
268
269 static Eina_Bool
_e_screensaver_handler_powersave_cb(void * data EINA_UNUSED,int type EINA_UNUSED,void * event EINA_UNUSED)270 _e_screensaver_handler_powersave_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
271 {
272 _e_screensaver_timeout = -1;
273 e_screensaver_update();
274 if ((e_config->screensaver_suspend) && (_e_screensaver_on))
275 {
276 if (_e_screensaver_suspend_timer)
277 ecore_timer_del(_e_screensaver_suspend_timer);
278 _e_screensaver_suspend_timer =
279 ecore_timer_loop_add(e_config->screensaver_suspend_delay,
280 _e_screensaver_suspend_cb, NULL);
281 }
282 return ECORE_CALLBACK_PASS_ON;
283 }
284
285 static double last_start = 0.0;
286
287 static Eina_Bool
_e_screensaver_handler_screensaver_on_cb(void * data EINA_UNUSED,int type EINA_UNUSED,void * event EINA_UNUSED)288 _e_screensaver_handler_screensaver_on_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
289 {
290 _e_screensaver_on = EINA_TRUE;
291 if (_e_screensaver_suspend_timer)
292 {
293 ecore_timer_del(_e_screensaver_suspend_timer);
294 _e_screensaver_suspend_timer = NULL;
295 }
296 if (e_config->screensaver_suspend)
297 _e_screensaver_suspend_timer =
298 ecore_timer_loop_add(e_config->screensaver_suspend_delay,
299 _e_screensaver_suspend_cb, NULL);
300 last_start = ecore_loop_time_get();
301 _e_screensaver_ask_presentation_count = 0;
302 return ECORE_CALLBACK_PASS_ON;
303 }
304
305 static Eina_Bool
_e_screensaver_handler_screensaver_off_cb(void * data EINA_UNUSED,int type EINA_UNUSED,void * event EINA_UNUSED)306 _e_screensaver_handler_screensaver_off_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
307 {
308 // e_dpms_force_update();
309
310 _e_screensaver_on = EINA_FALSE;
311 if (_e_screensaver_suspend_timer)
312 {
313 ecore_timer_del(_e_screensaver_suspend_timer);
314 _e_screensaver_suspend_timer = NULL;
315 }
316 if ((last_start > 0.0) && (e_config->screensaver_ask_presentation))
317 {
318 double current = ecore_loop_time_get();
319
320 if ((last_start + e_config->screensaver_ask_presentation_timeout)
321 >= current)
322 _e_screensaver_ask_presentation_mode();
323 last_start = 0.0;
324 }
325 else if (_e_screensaver_ask_presentation_count)
326 _e_screensaver_ask_presentation_count = 0;
327 return ECORE_CALLBACK_PASS_ON;
328 }
329
330 static Eina_Bool
_e_screensaver_handler_border_fullscreen_check_cb(void * data EINA_UNUSED,int type EINA_UNUSED,void * event EINA_UNUSED)331 _e_screensaver_handler_border_fullscreen_check_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
332 {
333 e_screensaver_update();
334 return ECORE_CALLBACK_PASS_ON;
335 }
336
337 static Eina_Bool
_e_screensaver_handler_border_desk_set_cb(void * data EINA_UNUSED,int type EINA_UNUSED,void * event EINA_UNUSED)338 _e_screensaver_handler_border_desk_set_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
339 {
340 e_screensaver_update();
341 return ECORE_CALLBACK_PASS_ON;
342 }
343
344 static Eina_Bool
_e_screensaver_handler_desk_show_cb(void * data EINA_UNUSED,int type EINA_UNUSED,void * event EINA_UNUSED)345 _e_screensaver_handler_desk_show_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
346 {
347 e_screensaver_update();
348 return ECORE_CALLBACK_PASS_ON;
349 }
350
351 static Eina_Bool
_e_screensaver_idle_timer_cb(void * d EINA_UNUSED)352 _e_screensaver_idle_timer_cb(void *d EINA_UNUSED)
353 {
354 ecore_event_add(E_EVENT_SCREENSAVER_ON, NULL, NULL, NULL);
355 screensaver_idle_timer = NULL;
356 return EINA_FALSE;
357 }
358
359 EINTERN void
e_screensaver_preinit(void)360 e_screensaver_preinit(void)
361 {
362 E_EVENT_SCREENSAVER_ON = ecore_event_type_new();
363 E_EVENT_SCREENSAVER_OFF = ecore_event_type_new();
364 E_EVENT_SCREENSAVER_OFF_PRE = ecore_event_type_new();
365 }
366
367 EINTERN int
e_screensaver_init(void)368 e_screensaver_init(void)
369 {
370 _e_screensaver_handler_on = ecore_event_handler_add
371 (E_EVENT_SCREENSAVER_ON, _e_screensaver_handler_screensaver_on_cb, NULL);
372 _e_screensaver_handler_off = ecore_event_handler_add
373 (E_EVENT_SCREENSAVER_OFF, _e_screensaver_handler_screensaver_off_cb, NULL);
374 _e_screensaver_handler_config_mode = ecore_event_handler_add
375 (E_EVENT_CONFIG_MODE_CHANGED, _e_screensaver_handler_config_mode_cb, NULL);
376
377 _e_screensaver_handler_border_fullscreen = ecore_event_handler_add
378 (E_EVENT_CLIENT_FULLSCREEN, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
379 _e_screensaver_handler_border_unfullscreen = ecore_event_handler_add
380 (E_EVENT_CLIENT_UNFULLSCREEN, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
381 _e_screensaver_handler_border_remove = ecore_event_handler_add
382 (E_EVENT_CLIENT_REMOVE, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
383 _e_screensaver_handler_border_iconify = ecore_event_handler_add
384 (E_EVENT_CLIENT_ICONIFY, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
385 _e_screensaver_handler_border_uniconify = ecore_event_handler_add
386 (E_EVENT_CLIENT_UNICONIFY, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
387 _e_screensaver_handler_border_desk_set = ecore_event_handler_add
388 (E_EVENT_CLIENT_DESK_SET, _e_screensaver_handler_border_desk_set_cb, NULL);
389 _e_screensaver_handler_desk_show = ecore_event_handler_add
390 (E_EVENT_DESK_SHOW, _e_screensaver_handler_desk_show_cb, NULL);
391
392 _e_screensaver_handler_powersave = ecore_event_handler_add
393 (E_EVENT_POWERSAVE_UPDATE, _e_screensaver_handler_powersave_cb, NULL);
394
395 return 1;
396 }
397
398 EINTERN int
e_screensaver_shutdown(void)399 e_screensaver_shutdown(void)
400 {
401 if (_e_screensaver_handler_on)
402 {
403 ecore_event_handler_del(_e_screensaver_handler_on);
404 _e_screensaver_handler_on = NULL;
405 }
406
407 if (_e_screensaver_handler_off)
408 {
409 ecore_event_handler_del(_e_screensaver_handler_off);
410 _e_screensaver_handler_off = NULL;
411 }
412
413 if (_e_screensaver_suspend_timer)
414 {
415 ecore_timer_del(_e_screensaver_suspend_timer);
416 _e_screensaver_suspend_timer = NULL;
417 }
418
419 if (_e_screensaver_handler_powersave)
420 {
421 ecore_event_handler_del(_e_screensaver_handler_powersave);
422 _e_screensaver_handler_powersave = NULL;
423 }
424
425 if (_e_screensaver_handler_config_mode)
426 {
427 ecore_event_handler_del(_e_screensaver_handler_config_mode);
428 _e_screensaver_handler_config_mode = NULL;
429 }
430
431 if (_e_screensaver_handler_border_fullscreen)
432 {
433 ecore_event_handler_del(_e_screensaver_handler_border_fullscreen);
434 _e_screensaver_handler_border_fullscreen = NULL;
435 }
436
437 if (_e_screensaver_handler_border_unfullscreen)
438 {
439 ecore_event_handler_del(_e_screensaver_handler_border_unfullscreen);
440 _e_screensaver_handler_border_unfullscreen = NULL;
441 }
442
443 if (_e_screensaver_handler_border_remove)
444 {
445 ecore_event_handler_del(_e_screensaver_handler_border_remove);
446 _e_screensaver_handler_border_remove = NULL;
447 }
448
449 if (_e_screensaver_handler_border_iconify)
450 {
451 ecore_event_handler_del(_e_screensaver_handler_border_iconify);
452 _e_screensaver_handler_border_iconify = NULL;
453 }
454
455 if (_e_screensaver_handler_border_uniconify)
456 {
457 ecore_event_handler_del(_e_screensaver_handler_border_uniconify);
458 _e_screensaver_handler_border_uniconify = NULL;
459 }
460
461 if (_e_screensaver_handler_border_desk_set)
462 {
463 ecore_event_handler_del(_e_screensaver_handler_border_desk_set);
464 _e_screensaver_handler_border_desk_set = NULL;
465 }
466
467 if (_e_screensaver_handler_desk_show)
468 {
469 ecore_event_handler_del(_e_screensaver_handler_desk_show);
470 _e_screensaver_handler_desk_show = NULL;
471 }
472
473 return 1;
474 }
475
476 E_API void
e_screensaver_attrs_set(int timeout,int blanking,int expose)477 e_screensaver_attrs_set(int timeout, int blanking, int expose)
478 {
479 _e_screensaver_timeout = timeout;
480 // _e_screensaver_interval = ecore_x_screensaver_interval_get();
481 _e_screensaver_blanking = blanking;
482 _e_screensaver_expose = expose;
483 }
484
485 E_API Eina_Bool
e_screensaver_on_get(void)486 e_screensaver_on_get(void)
487 {
488 return _e_screensaver_on;
489 }
490
491 E_API void
e_screensaver_activate(void)492 e_screensaver_activate(void)
493 {
494 if (e_screensaver_on_get()) return;
495
496 E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
497 #ifndef HAVE_WAYLAND_ONLY
498 if (e_comp->comp_type != E_PIXMAP_TYPE_WL)
499 ecore_x_screensaver_activate();
500 #endif
501 #ifdef HAVE_WAYLAND
502 if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
503 e_comp_wl_screensaver_activate();
504 #endif
505 }
506
507 E_API void
e_screensaver_deactivate(void)508 e_screensaver_deactivate(void)
509 {
510 if (!e_screensaver_on_get()) return;
511
512 E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
513 #ifndef HAVE_WAYLAND_ONLY
514 if (e_comp->comp_type != E_PIXMAP_TYPE_WL)
515 ecore_x_screensaver_reset();
516 #endif
517 #ifdef HAVE_WAYLAND
518 if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
519 e_comp_canvas_notidle();
520 #endif
521 }
522
523 E_API void
e_screensaver_now_set(Eina_Bool now)524 e_screensaver_now_set(Eina_Bool now)
525 {
526 _screensaver_now = now;
527 }
528
529 E_API void
e_screensaver_eval(Eina_Bool saver_on)530 e_screensaver_eval(Eina_Bool saver_on)
531 {
532 Eina_Bool use_special_instead_of_dim = EINA_FALSE;
533
534 if ((e_desklock_state_get()) &&
535 (e_config->screensaver_desklock_timeout > 0))
536 use_special_instead_of_dim = EINA_TRUE;
537 if (saver_on)
538 {
539 if ((e_config->backlight.idle_dim) &&
540 (!use_special_instead_of_dim))
541 {
542 double t2 = e_config->backlight.timer;
543
544 if ((e_powersave_mode_get() > E_POWERSAVE_MODE_LOW) &&
545 (e_config->backlight.battery_timer > 0.0))
546 t2 = e_config->backlight.battery_timer;
547 double t = e_config->screensaver_timeout - t2;
548
549 if (t < 1.0) t = 1.0;
550 if (_screensaver_now) t = 1.0;
551 E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
552 if (!_screensaver_ignore)
553 {
554 if (e_config->screensaver_enable)
555 screensaver_idle_timer = ecore_timer_loop_add
556 (t, _e_screensaver_idle_timer_cb, NULL);
557 if (e_backlight_mode_get(NULL) != E_BACKLIGHT_MODE_DIM)
558 {
559 e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_DIM);
560 screensaver_dimmed = EINA_TRUE;
561 }
562 }
563 }
564 else
565 {
566 if (!_screensaver_ignore)
567 {
568 if (!e_screensaver_on_get())
569 ecore_event_add(E_EVENT_SCREENSAVER_ON, NULL, NULL, NULL);
570 }
571 }
572 return;
573 }
574 else
575 {
576 #ifdef HAVE_WAYLAND
577 if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
578 ecore_event_add(E_EVENT_SCREENSAVER_OFF_PRE, NULL, NULL, NULL);
579 #endif
580 }
581 if (screensaver_idle_timer)
582 {
583 E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
584 if ((e_config->backlight.idle_dim) &&
585 (!use_special_instead_of_dim))
586 {
587 if (e_backlight_mode_get(NULL) != E_BACKLIGHT_MODE_NORMAL)
588 e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_NORMAL);
589 }
590 return;
591 }
592 if (screensaver_dimmed)
593 {
594 if (e_backlight_mode_get(NULL) != E_BACKLIGHT_MODE_NORMAL)
595 e_backlight_mode_set(NULL, E_BACKLIGHT_MODE_NORMAL);
596 screensaver_dimmed = EINA_FALSE;
597 }
598 if (!_screensaver_ignore)
599 {
600 if (e_screensaver_on_get())
601 {
602 e_screensaver_update();
603 ecore_event_add(E_EVENT_SCREENSAVER_OFF, NULL, NULL, NULL);
604 }
605 }
606 }
607
608 E_API void
e_screensaver_inhibit_toggle(Eina_Bool inhibit)609 e_screensaver_inhibit_toggle(Eina_Bool inhibit)
610 {
611 #ifdef HAVE_WAYLAND
612 if (e_comp->comp_type != E_PIXMAP_TYPE_WL) return;
613 e_comp_wl_screensaver_inhibit(inhibit);
614 #else
615 (void)inhibit;
616 #endif
617 }
618
619