raster pushed a commit to branch enlightenment-0.24.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=a0d4d2cf0a90807830ac24b1faa20deef60e80fb

commit a0d4d2cf0a90807830ac24b1faa20deef60e80fb
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Sun Jun 28 15:06:37 2020 +0100

    e wl screen dimming.blanking/timeouts/lock handling redo/fixup
    
    so there was a fair bit of stick-tape and chewing gum in putting the
    wl screensaving in e_Screensaver.c ... it thus was very different to
    the x stuff. it SHOULd have had e_comp_wl handle idle timeout like the
    xserver did and then glue in the same way the x code did to be
    conistsent. instead of trying to fix the chewing gum ball there in
    e_Screensver.c to find the logic holes ... i made it work like the
    code as indicated above. this now makes it work reliably. dim
    reliably. lock reliably. it even doesnt exit on ctrl+alt+backspace
    once desklock is up now to allow locks to really lock... (dont use
    locks during dev then if you need ctl+alt+backspace).
    
    at least now all this dpms/screensavwr/brightness/backlight/lock goop
    is consistent between wl and x11 and wl seems reliabkle now (to me).
    
    knock this off as an annoyance fixed.
    
    @fix
---
 src/bin/e_backlight.c   |   2 +
 src/bin/e_client.c      |   2 +-
 src/bin/e_comp.c        |   4 +-
 src/bin/e_comp_canvas.c |  21 +++++--
 src/bin/e_comp_canvas.h |   1 +
 src/bin/e_comp_wl.c     | 159 +++++++++++++++++++++++++++++++++++++++++++++++-
 src/bin/e_comp_wl.h     |   6 ++
 src/bin/e_screensaver.c |  79 +++++-------------------
 src/bin/e_screensaver.h |   1 -
 src/bin/e_sys.c         |   8 +++
 10 files changed, 208 insertions(+), 75 deletions(-)

diff --git a/src/bin/e_backlight.c b/src/bin/e_backlight.c
index cdb2c6a3f..b1ccd7d6a 100644
--- a/src/bin/e_backlight.c
+++ b/src/bin/e_backlight.c
@@ -728,6 +728,8 @@ e_backlight_level_set(E_Zone *zone, double val, double tim)
    if (zone->bl_mode == E_BACKLIGHT_MODE_NORMAL) tim = 0.5;
    else if (tim < 0.0) tim = e_config->backlight.transition;
 
+   if ((bd->anim) && (fabs(bd->to_val - val) < DBL_EPSILON)) return;
+
    E_FREE_FUNC(bd->retry_timer, ecore_timer_del);
    E_FREE_FUNC(bd->anim, ecore_animator_del);
    bd->from_val = bl_now;
diff --git a/src/bin/e_client.c b/src/bin/e_client.c
index f486af8cb..c04d9da61 100644
--- a/src/bin/e_client.c
+++ b/src/bin/e_client.c
@@ -4709,7 +4709,7 @@ e_client_urgent_set(E_Client *ec, Eina_Bool urgent)
         int x, y;
         ecore_evas_pointer_xy_get(e_comp->ee, &x, &y);
         ecore_evas_pointer_warp(e_comp->ee, x, y);
-        e_screensaver_notidle();
+        e_comp_canvas_notidle();
      }
    if (!ec->zone) return;
 
diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c
index 642008998..523c5f24f 100644
--- a/src/bin/e_comp.c
+++ b/src/bin/e_comp.c
@@ -1589,7 +1589,7 @@ e_comp_ignore_win_find(Ecore_Window win)
 }
 
 E_API void
-e_comp_override_del()
+e_comp_override_del(void)
 {
    e_comp->nocomp_override--;
    if (e_comp->nocomp_override <= 0)
@@ -1600,7 +1600,7 @@ e_comp_override_del()
 }
 
 E_API void
-e_comp_override_add()
+e_comp_override_add(void)
 {
    e_comp->nocomp_override++;
    if ((e_comp->nocomp_override > 0) && (e_comp->nocomp)) _e_comp_nocomp_end();
diff --git a/src/bin/e_comp_canvas.c b/src/bin/e_comp_canvas.c
index 596ab52d4..5ee32a853 100644
--- a/src/bin/e_comp_canvas.c
+++ b/src/bin/e_comp_canvas.c
@@ -74,7 +74,7 @@ _e_comp_canvas_cb_mouse_in(void *d EINA_UNUSED, Evas *e 
EINA_UNUSED, Evas_Object
 {
    E_Client *ec;
 
-   e_screensaver_notidle();
+   e_comp_canvas_notidle();
    if (e_client_action_get() || e_grabinput_mouse_win_get()) return;
    ec = e_client_focused_get();
    if (ec && (!ec->border_menu)) e_focus_event_mouse_out(ec);
@@ -83,7 +83,7 @@ _e_comp_canvas_cb_mouse_in(void *d EINA_UNUSED, Evas *e 
EINA_UNUSED, Evas_Object
 static void
 _e_comp_canvas_cb_mouse_down(void *d EINA_UNUSED, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED, void *event_info)
 {
-   e_screensaver_notidle();
+   e_comp_canvas_notidle();
    if (e_client_action_get() || e_grabinput_mouse_win_get()) return;
    e_bindings_mouse_down_evas_event_handle(E_BINDING_CONTEXT_COMPOSITOR, 
E_OBJECT(e_comp), event_info);
 }
@@ -91,7 +91,7 @@ _e_comp_canvas_cb_mouse_down(void *d EINA_UNUSED, Evas *e 
EINA_UNUSED, Evas_Obje
 static void
 _e_comp_canvas_cb_mouse_up(void *d EINA_UNUSED, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED, void *event_info)
 {
-   e_screensaver_notidle();
+   e_comp_canvas_notidle();
    if (e_client_action_get() || e_grabinput_mouse_win_get()) return;
    e_bindings_mouse_up_evas_event_handle(E_BINDING_CONTEXT_COMPOSITOR, 
E_OBJECT(e_comp), event_info);
 }
@@ -99,7 +99,7 @@ _e_comp_canvas_cb_mouse_up(void *d EINA_UNUSED, Evas *e 
EINA_UNUSED, Evas_Object
 static void
 _e_comp_canvas_cb_mouse_wheel(void *d EINA_UNUSED, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED, void *event_info)
 {
-   e_screensaver_notidle();
+   e_comp_canvas_notidle();
    if (e_client_action_get() || e_grabinput_mouse_win_get()) return;
    e_bindings_wheel_evas_event_handle(E_BINDING_CONTEXT_COMPOSITOR, 
E_OBJECT(e_comp), event_info);
 }
@@ -107,7 +107,7 @@ _e_comp_canvas_cb_mouse_wheel(void *d EINA_UNUSED, Evas *e 
EINA_UNUSED, Evas_Obj
 static Eina_Bool
 _key_down(int ctx, Ecore_Event_Key *ev)
 {
-   e_screensaver_notidle();
+   e_comp_canvas_notidle();
    if (e_desklock_state_get() && (ctx == E_BINDING_CONTEXT_MANAGER))
      {
         E_Desklock_Interface *iface = e_desklock_interface_current_get();
@@ -157,7 +157,7 @@ _e_comp_cb_key_down(void *data EINA_UNUSED, int ev_type 
EINA_UNUSED, Ecore_Event
 static Eina_Bool
 _key_up(int ctx, Ecore_Event_Key *ev)
 {
-   e_screensaver_notidle();
+   e_comp_canvas_notidle();
    if (e_desklock_state_get() && (ctx == E_BINDING_CONTEXT_MANAGER))
      {
         E_Desklock_Interface *iface = e_desklock_interface_current_get();
@@ -437,6 +437,7 @@ e_comp_canvas_init(int w, int h)
    if ((!after_restart) || (!e_comp_x))
      ecore_evas_pointer_warp(e_comp->ee, e_comp->w / 2, e_comp->h / 2);
 
+   e_comp_wl_notidle();
    return EINA_TRUE;
 }
 
@@ -874,6 +875,14 @@ e_comp_canvas_feed_mouse_up(unsigned int activate_time)
      }
 }
 
+E_API void
+e_comp_canvas_notidle(void)
+{
+#ifdef HAVE_WAYLAND
+   if (e_comp->comp_type == E_PIXMAP_TYPE_WL) e_comp_wl_notidle();
+#endif
+}
+
 E_API Evas_Object *
 e_comp_canvas_event_grabber_add(void)
 {
diff --git a/src/bin/e_comp_canvas.h b/src/bin/e_comp_canvas.h
index 8391c67be..1144c0fa0 100644
--- a/src/bin/e_comp_canvas.h
+++ b/src/bin/e_comp_canvas.h
@@ -29,6 +29,7 @@ E_API E_Layer e_comp_canvas_client_layer_map_nearest(int 
layer);
 E_API void e_comp_canvas_keys_grab(void);
 E_API void e_comp_canvas_keys_ungrab(void);
 E_API void e_comp_canvas_feed_mouse_up(unsigned int activate_time);
+E_API void e_comp_canvas_notidle(void);
 E_API Evas_Object *e_comp_canvas_event_grabber_add(void);
 EINTERN void e_comp_canvas_intercept(void);
 
diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c
index a32ff16ac..a9ceed782 100644
--- a/src/bin/e_comp_wl.c
+++ b/src/bin/e_comp_wl.c
@@ -1106,6 +1106,16 @@ _e_comp_wl_client_evas_init(E_Client *ec)
                                   _e_comp_wl_evas_cb_color_set, ec);
 
    ec->comp_data->evas_init = EINA_TRUE;
+   E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_ON, 
_e_comp_wl_screensaver_on, NULL);
+   E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_OFF, 
_e_comp_wl_screensaver_off, NULL);
+   e_comp_wl_notidle();
+
+   e_screensaver_attrs_set(e_screensaver_timeout_get(EINA_TRUE),
+                           e_config->screensaver_blanking,
+                           e_config->screensaver_expose);
+// XXX: maybe later like x work on explicit suspend of compositor stuff?
+//   e_desklock_show_hook_add(_e_comp_x_desklock_show);
+//   e_desklock_hide_hook_add(_e_comp_x_desklock_hide);
 }
 
 static inline int
@@ -1199,7 +1209,7 @@ _e_comp_wl_cb_mouse_move(void *d EINA_UNUSED, int t 
EINA_UNUSED, Ecore_Event_Mou
 
    e_comp_wl->ptr.x = ev->x;
    e_comp_wl->ptr.y = ev->y;
-   e_screensaver_notidle();
+   e_comp_canvas_notidle();
    if (e_comp_wl->selection.target &&
        (!e_client_has_xwindow(e_comp_wl->selection.target)) &&
        e_comp_wl->drag)
@@ -3405,7 +3415,9 @@ e_comp_wl_key_down(Ecore_Event_Key *ev, E_Client *ec)
        ((ev->modifiers & ECORE_EVENT_MODIFIER_ALT) ||
        (ev->modifiers & ECORE_EVENT_MODIFIER_ALTGR)) &&
        eina_streq(ev->key, "BackSpace"))
-     exit(0);
+     {
+        if (!e_desklock_state_get()) exit(0);
+     }
 #endif
 
    end = (uint32_t *)e_comp_wl->kbd.keys.data + (e_comp_wl->kbd.keys.size / 
sizeof(*k));
@@ -3682,3 +3694,146 @@ e_comp_wl_grab_client_mouse_button(const 
Ecore_Event_Mouse_Button *ev)
    e_comp_canvas_feed_mouse_up(0);
    return ECORE_CALLBACK_DONE;
 }
+
+static Eina_Bool saver_inhibit = EINA_FALSE;
+static Eina_Bool saver_on = EINA_FALSE;
+static Ecore_Timer *screensaver_eval_timer = NULL;
+static Ecore_Timer *screensaver_idle_timer = NULL;
+
+static Eina_Bool
+_e_comp_wl_creensaver_eval_cb(void *d EINA_UNUSED)
+{
+   screensaver_eval_timer = NULL;
+   if (!saver_on)
+     {
+        if (e_comp->screen && e_comp->screen->dpms)
+          e_comp->screen->dpms(0);
+     }
+   e_screensaver_eval(saver_on);
+   return EINA_FALSE;
+}
+
+static Eina_Bool
+_e_comp_wl_screensaver_idle_cb(void *data EINA_UNUSED)
+{
+   screensaver_idle_timer = NULL;
+   if (e_screensaver_ignore_get()) return EINA_FALSE;
+   if (!saver_on)
+     {
+        saver_on = EINA_TRUE;
+        E_FREE_FUNC(screensaver_eval_timer, ecore_timer_del);
+        screensaver_eval_timer = ecore_timer_loop_add
+          (0.3, _e_comp_wl_creensaver_eval_cb, NULL);
+     }
+   return EINA_FALSE;
+}
+
+static void
+_e_comp_cb_pointer_suspend_resume_done(void *data, Evas_Object *obj, const 
char *emission, const char *source)
+{
+   edje_object_signal_callback_del(obj, emission, source,
+                                   _e_comp_cb_pointer_suspend_resume_done);
+   if (!data)
+     {
+        e_pointer_grab_set(e_comp->pointer, EINA_FALSE);
+     }
+}
+
+EINTERN Eina_Bool
+_e_comp_wl_screensaver_on()
+{
+   const char *s;
+
+   if ((!e_comp->pointer) || (!e_comp->pointer->o_ptr)) return 
ECORE_CALLBACK_RENEW;
+   s = edje_object_data_get(e_comp->pointer->o_ptr, "can_suspend");
+
+   if ((s) && (atoi(s) == 1))
+     {
+        if (!e_desklock_state_get())
+          {
+             e_pointer_grab_set(e_comp->pointer, EINA_FALSE);
+             e_pointer_grab_set(e_comp->pointer, EINA_TRUE);
+          }
+        edje_object_signal_callback_del(e_comp->pointer->o_ptr,
+                                        "e,state,mouse,suspend,done", "e",
+                                        
_e_comp_cb_pointer_suspend_resume_done);
+        edje_object_signal_callback_del(e_comp->pointer->o_ptr,
+                                        "e,state,mouse,resume,done", "e",
+                                        
_e_comp_cb_pointer_suspend_resume_done);
+        edje_object_signal_callback_add(e_comp->pointer->o_ptr,
+                                        "e,state,mouse,suspend,done",
+                                        "e",
+                                        _e_comp_cb_pointer_suspend_resume_done,
+                                        e_comp);
+        edje_object_signal_emit(e_comp->pointer->o_ptr,
+                                "e,state,mouse,suspend", "e");
+     }
+   return ECORE_CALLBACK_RENEW;
+}
+
+EINTERN Eina_Bool
+_e_comp_wl_screensaver_off()
+{
+   const char *s;
+
+   e_pointer_grab_set(e_comp->pointer, EINA_FALSE);
+   if ((!e_comp->pointer) || (!e_comp->pointer->o_ptr)) return 
ECORE_CALLBACK_RENEW;
+   s = edje_object_data_get(e_comp->pointer->o_ptr, "can_suspend");
+
+   if ((s) && (atoi(s) == 1))
+     {
+        if (!e_desklock_state_get())
+          {
+             e_pointer_grab_set(e_comp->pointer, EINA_TRUE);
+          }
+        edje_object_signal_callback_del(e_comp->pointer->o_ptr,
+                                        "e,state,mouse,suspend,done", "e",
+                                        
_e_comp_cb_pointer_suspend_resume_done);
+        edje_object_signal_callback_del(e_comp->pointer->o_ptr,
+                                        "e,state,mouse,resume,done", "e",
+                                        
_e_comp_cb_pointer_suspend_resume_done);
+        edje_object_signal_callback_add(e_comp->pointer->o_ptr,
+                                        "e,state,mouse,resume,done",
+                                        "e",
+                                        _e_comp_cb_pointer_suspend_resume_done,
+                                        NULL);
+        edje_object_signal_emit(e_comp->pointer->o_ptr,
+                                "e,state,mouse,resume", "e");
+     }
+   return ECORE_CALLBACK_RENEW;
+}
+
+E_API void
+e_comp_wl_notidle(void)
+{
+   if (saver_on)
+     {
+        saver_on = EINA_FALSE;
+        E_FREE_FUNC(screensaver_eval_timer, ecore_timer_del);
+        screensaver_eval_timer = ecore_timer_loop_add
+          (0.3, _e_comp_wl_creensaver_eval_cb, NULL);
+     }
+   E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
+   screensaver_idle_timer = ecore_timer_add
+     (e_screensaver_timeout_get(EINA_TRUE),
+      _e_comp_wl_screensaver_idle_cb, NULL);
+}
+
+E_API void
+e_comp_wl_screensaver_activate(void)
+{
+   saver_on = EINA_TRUE;
+   E_FREE_FUNC(screensaver_eval_timer, ecore_timer_del);
+   E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
+   e_screensaver_eval(saver_on);
+}
+
+E_API void
+e_comp_wl_screensaver_inhibit(Eina_Bool inhibit)
+{
+   if (inhibit == saver_inhibit) return;
+   saver_inhibit = inhibit;
+   e_comp_wl_notidle();
+   if (inhibit)
+     E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
+}
diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h
index e234e5d44..f9b29b5dd 100644
--- a/src/bin/e_comp_wl.h
+++ b/src/bin/e_comp_wl.h
@@ -439,6 +439,12 @@ E_API void 
e_comp_wl_extension_pointer_unconstrain(E_Client *ec);
 E_API void e_comp_wl_extension_action_route_pid_allowed_set(uint32_t pid, 
Eina_Bool allow);
 E_API const void *e_comp_wl_extension_action_route_interface_get(int *version);
 
+E_API void e_comp_wl_notidle(void);
+E_API void e_comp_wl_screensaver_activate(void);
+E_API void e_comp_wl_screensaver_inhibit(Eina_Bool inhibit);
+
+EINTERN Eina_Bool _e_comp_wl_screensaver_on();
+EINTERN Eina_Bool _e_comp_wl_screensaver_off();
 
 E_API void
 e_policy_wl_aux_message_send(E_Client *ec,
diff --git a/src/bin/e_screensaver.c b/src/bin/e_screensaver.c
index a75ae6d1a..d83335850 100644
--- a/src/bin/e_screensaver.c
+++ b/src/bin/e_screensaver.c
@@ -15,7 +15,6 @@ static E_Dialog *_e_screensaver_ask_presentation_dia = NULL;
 static int _e_screensaver_ask_presentation_count = 0;
 
 static int _e_screensaver_timeout = 0;
-//static int _e_screensaver_interval = 0;
 static int _e_screensaver_blanking = 0;
 static int _e_screensaver_expose = 0;
 
@@ -25,11 +24,6 @@ static Eina_Bool _e_screensaver_on = EINA_FALSE;
 static Ecore_Timer *screensaver_idle_timer = NULL;
 static Eina_Bool screensaver_dimmed = EINA_FALSE;
 
-#ifdef HAVE_WAYLAND
-static Ecore_Timer *_e_screensaver_timer;
-static Eina_Bool _e_screensaver_inhibited = EINA_FALSE;
-#endif
-
 static Eina_Bool _screensaver_ignore = EINA_FALSE;
 static Eina_Bool _screensaver_now = EINA_FALSE;
 
@@ -37,16 +31,6 @@ E_API int E_EVENT_SCREENSAVER_ON = -1;
 E_API int E_EVENT_SCREENSAVER_OFF = -1;
 E_API int E_EVENT_SCREENSAVER_OFF_PRE = -1;
 
-#ifdef HAVE_WAYLAND
-static Eina_Bool
-_e_screensaver_idle_timeout_cb(void *d)
-{
-   e_screensaver_eval(!!d);
-   _e_screensaver_timer = NULL;
-   return EINA_FALSE;
-}
-#endif
-
 E_API int
 e_screensaver_timeout_get(Eina_Bool use_idle)
 {
@@ -107,7 +91,7 @@ e_screensaver_ignore_get(void)
 E_API void
 e_screensaver_update(void)
 {
-   int timeout;
+   int timeout, interval = 0, blanking = 0, expose = 0;
    Eina_Bool changed = EINA_FALSE;
 
    timeout = e_screensaver_timeout_get(EINA_TRUE);
@@ -122,18 +106,11 @@ e_screensaver_update(void)
         _e_screensaver_timeout = timeout;
         changed = EINA_TRUE;
      }
-#ifndef HAVE_WAYLAND_ONLY
-   int interval = 0, blanking = 0, expose = 0;
 
    interval = e_config->screensaver_interval;
    blanking = e_config->screensaver_blanking;
    expose = e_config->screensaver_expose;
 
-//   if (_e_screensaver_interval != interval)
-//     {
-//        _e_screensaver_interval = interval;
-//        changed = EINA_TRUE;
-//     }
    if (_e_screensaver_blanking != blanking)
      {
         _e_screensaver_blanking = blanking;
@@ -145,9 +122,10 @@ e_screensaver_update(void)
         changed = EINA_TRUE;
      }
 
-   if (e_comp->comp_type != E_PIXMAP_TYPE_WL)
+   if (changed)
      {
-        if (changed)
+#ifndef HAVE_WAYLAND_ONLY
+        if (e_comp->comp_type != E_PIXMAP_TYPE_WL)
           {
              // this toggling of dpms is a bug workaround in x that i found
              // where if we change screensaver timeouts and force a manual
@@ -168,16 +146,8 @@ e_screensaver_update(void)
                }
              ecore_x_screensaver_set(timeout, interval, blanking, expose);
           }
-     }
 #endif
-#ifdef HAVE_WAYLAND
-   if (changed && (e_comp->comp_type == E_PIXMAP_TYPE_WL))
-     {
-        E_FREE_FUNC(_e_screensaver_timer, ecore_timer_del);
-        if (timeout)
-          _e_screensaver_timer = ecore_timer_loop_add(timeout, 
_e_screensaver_idle_timeout_cb, (void*)1);
      }
-#endif
 }
 
 static Eina_Bool
@@ -354,10 +324,6 @@ _e_screensaver_handler_screensaver_off_cb(void *data 
EINA_UNUSED, int type EINA_
      }
    else if (_e_screensaver_ask_presentation_count)
      _e_screensaver_ask_presentation_count = 0;
-#ifdef HAVE_WAYLAND
-   if (_e_screensaver_timeout && (e_comp->comp_type == E_PIXMAP_TYPE_WL))
-     _e_screensaver_timer = ecore_timer_loop_add(_e_screensaver_timeout, 
_e_screensaver_idle_timeout_cb, (void*)1);
-#endif
    return ECORE_CALLBACK_PASS_ON;
 }
 
@@ -534,8 +500,7 @@ e_screensaver_activate(void)
 #endif
 #ifdef HAVE_WAYLAND
    if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
-     e_screensaver_eval(1);
-   E_FREE_FUNC(_e_screensaver_timer, ecore_timer_del);
+     e_comp_wl_screensaver_activate();
 #endif
 }
 
@@ -550,7 +515,8 @@ e_screensaver_deactivate(void)
      ecore_x_screensaver_reset();
 #endif
 #ifdef HAVE_WAYLAND
-   e_screensaver_notidle();
+   if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
+     e_comp_canvas_notidle();
 #endif
 }
 
@@ -605,6 +571,13 @@ e_screensaver_eval(Eina_Bool saver_on)
           }
         return;
      }
+   else
+     {
+#ifdef HAVE_WAYLAND
+        if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
+          ecore_event_add(E_EVENT_SCREENSAVER_OFF_PRE, NULL, NULL, NULL);
+#endif
+     }
    if (screensaver_idle_timer)
      {
         E_FREE_FUNC(screensaver_idle_timer, ecore_timer_del);
@@ -632,34 +605,14 @@ e_screensaver_eval(Eina_Bool saver_on)
      }
 }
 
-E_API void
-e_screensaver_notidle(void)
-{
-#ifdef HAVE_WAYLAND
-   if (_e_screensaver_inhibited || (e_comp->comp_type != E_PIXMAP_TYPE_WL)) 
return;
-   E_FREE_FUNC(_e_screensaver_timer, ecore_timer_del);
-   if (e_screensaver_on_get())
-     {
-        ecore_event_add(E_EVENT_SCREENSAVER_OFF_PRE, NULL, NULL, NULL);
-        _e_screensaver_timer = ecore_timer_loop_add(0.2, 
_e_screensaver_idle_timeout_cb, NULL);
-     }
-   else if (_e_screensaver_timeout)
-     _e_screensaver_timer = ecore_timer_loop_add(_e_screensaver_timeout, 
_e_screensaver_idle_timeout_cb, (void*)1);
-#endif
-}
-
 E_API void
 e_screensaver_inhibit_toggle(Eina_Bool inhibit)
 {
 #ifdef HAVE_WAYLAND
    if (e_comp->comp_type != E_PIXMAP_TYPE_WL) return;
-   E_FREE_FUNC(_e_screensaver_timer, ecore_timer_del);
-   _e_screensaver_inhibited = !!inhibit;
-   if (inhibit)
-     e_screensaver_eval(0);
-   else
-     e_screensaver_notidle();
+   e_comp_wl_screensaver_inhibit(inhibit);
 #else
    (void)inhibit;
 #endif
 }
+
diff --git a/src/bin/e_screensaver.h b/src/bin/e_screensaver.h
index 5b1cd6187..a8cd8753d 100644
--- a/src/bin/e_screensaver.h
+++ b/src/bin/e_screensaver.h
@@ -21,7 +21,6 @@ E_API void e_screensaver_deactivate(void);
 
 E_API void e_screensaver_now_set(Eina_Bool now);
 E_API void e_screensaver_eval(Eina_Bool saver_on);
-E_API void e_screensaver_notidle(void);
 E_API void e_screensaver_inhibit_toggle(Eina_Bool inhibit);
 
 E_API extern int E_EVENT_SCREENSAVER_ON;
diff --git a/src/bin/e_sys.c b/src/bin/e_sys.c
index ee917732a..ec894fec9 100644
--- a/src/bin/e_sys.c
+++ b/src/bin/e_sys.c
@@ -189,6 +189,10 @@ _e_sys_comp_emit_cb_wait(E_Sys_Action a, const char *sig, 
const char *rep, Eina_
    if (e_comp->comp_type == E_PIXMAP_TYPE_X)
      _e_comp_x_screensaver_on();
 #endif
+#ifdef HAVE_WAYLAND
+   if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
+     _e_comp_wl_screensaver_on();
+#endif
 
    if (rep)
      {
@@ -276,6 +280,10 @@ _e_sys_comp_resume2(void *data EINA_UNUSED)
 #ifndef HAVE_WAYLAND_ONLY
    if (e_comp->comp_type == E_PIXMAP_TYPE_X)
      _e_comp_x_screensaver_off();
+#endif
+#ifdef HAVE_WAYLAND
+   if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
+     _e_comp_wl_screensaver_off();
 #endif
    EINA_LIST_FOREACH(e_comp->zones, l, zone)
      e_backlight_level_set(zone, resume_backlight, -1.0);

-- 


Reply via email to