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