This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository enlightenment.

View the commit online.

commit 1cb02d3480c7733317b28157cfbeb71678fa6fdf
Author: Carsten Haitzler <[email protected]>
AuthorDate: Thu Feb 16 22:48:43 2023 +0000

    dpms - fix cases where screensavwr was off but dpms still on
    
    @fix
---
 src/bin/e_comp_x.c      |  2 ++
 src/bin/e_dpms.c        | 23 +++++++++++++++++++----
 src/bin/e_dpms.h        |  2 ++
 src/bin/e_main.c        |  1 +
 src/bin/e_msgbus.c      |  3 +++
 src/bin/e_screensaver.c |  8 +++++++-
 src/bin/e_screensaver.h |  1 +
 7 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c
index 06abd0b34..818abbe20 100644
--- a/src/bin/e_comp_x.c
+++ b/src/bin/e_comp_x.c
@@ -5326,6 +5326,7 @@ _e_comp_cb_pointer_suspend_resume_done(void *data, Evas_Object *obj, const char
         e_pointer_grab_set(e_comp->pointer, EINA_FALSE);
      }
    e_screensaver_update();
+   e_dpms_force_update();
 }
 
 EINTERN Eina_Bool
@@ -5380,6 +5381,7 @@ _e_comp_x_screensaver_off()
    const char *s;
 
    e_screensaver_update();
+   e_dpms_force_update();
    _e_comp_pointer_ungrab();
    e_pointer_grab_set(e_comp->pointer, EINA_FALSE);
    if ((!e_comp->pointer) || (!e_comp->pointer->o_ptr)) return ECORE_CALLBACK_RENEW;
diff --git a/src/bin/e_dpms.c b/src/bin/e_dpms.c
index c8ad8b873..71ba5f7f0 100644
--- a/src/bin/e_dpms.c
+++ b/src/bin/e_dpms.c
@@ -13,6 +13,7 @@ static unsigned int _e_dpms_timeout_standby = 0;
 static unsigned int _e_dpms_timeout_suspend = 0;
 static unsigned int _e_dpms_timeout_off = 0;
 static int _e_dpms_enabled = EINA_FALSE;
+E_API Eina_Bool e_dpms_actual = EINA_FALSE;
 
 #ifdef HAVE_WAYLAND
 static Eina_List *handlers;
@@ -31,6 +32,7 @@ e_dpms_update(void)
    enabled = ((e_config->screensaver_enable) &&
               (!((e_util_fullscreen_any()) &&
                  (e_config->no_dpms_on_fullscreen))));
+   if (e_screensaver_current_timeout_get() == 0) enabled = EINA_FALSE;
    if (_e_dpms_enabled != enabled)
      {
         _e_dpms_enabled = enabled;
@@ -38,9 +40,15 @@ e_dpms_update(void)
         if (e_comp->comp_type == E_PIXMAP_TYPE_X)
           {
              if (!e_config->screensaver_dpms_off)
-               ecore_x_dpms_enabled_set(enabled);
+               {
+                  ecore_x_dpms_enabled_set(enabled);
+                  e_dpms_actual = enabled;
+               }
              else
-               ecore_x_dpms_enabled_set(0);
+               {
+                  ecore_x_dpms_enabled_set(0);
+                  e_dpms_actual = EINA_FALSE;
+               }
           }
 #endif
      }
@@ -83,13 +91,20 @@ e_dpms_force_update(void)
    int enabled;
 
    enabled = (e_config->screensaver_enable);
+   if (e_screensaver_current_timeout_get() == 0) enabled = EINA_FALSE;
 #ifndef HAVE_WAYLAND_ONLY
    if (e_comp->comp_type == E_PIXMAP_TYPE_X)
      {
         if (!e_config->screensaver_dpms_off)
-          ecore_x_dpms_enabled_set(enabled);
+          {
+             ecore_x_dpms_enabled_set(enabled);
+             e_dpms_actual = enabled;
+          }
         else
-          ecore_x_dpms_enabled_set(0);
+          {
+             ecore_x_dpms_enabled_set(0);
+             e_dpms_actual = EINA_FALSE;
+          }
      }
 #endif
    if (!enabled) return;
diff --git a/src/bin/e_dpms.h b/src/bin/e_dpms.h
index fdfed89ab..46b340f66 100644
--- a/src/bin/e_dpms.h
+++ b/src/bin/e_dpms.h
@@ -13,5 +13,7 @@ EINTERN int e_dpms_shutdown(void);
 E_API void e_dpms_update(void);
 E_API void e_dpms_force_update(void);
 
+E_API extern Eina_Bool e_dpms_actual;
+
 #endif
 #endif
diff --git a/src/bin/e_main.c b/src/bin/e_main.c
index 8368cad71..7d9c7d566 100644
--- a/src/bin/e_main.c
+++ b/src/bin/e_main.c
@@ -904,6 +904,7 @@ main(int argc, char **argv)
      {
         e_desklock_show_manual(EINA_TRUE);
         e_screensaver_update();
+        e_dpms_force_update();
      }
 
    TS("Efreet Paths");
diff --git a/src/bin/e_msgbus.c b/src/bin/e_msgbus.c
index f31ac74c0..ed1aa3197 100644
--- a/src/bin/e_msgbus.c
+++ b/src/bin/e_msgbus.c
@@ -229,6 +229,7 @@ _e_msgbus_screensaver_owner_change_cb(void *data EINA_UNUSED, const char *bus EI
           {
              // stop inhibiting SS
              e_screensaver_update();
+             e_dpms_force_update();
           }
      }
 }
@@ -274,6 +275,7 @@ _e_msgbus_screensaver_inhibit_cb(const Eldbus_Service_Interface *iface EINA_UNUS
         // start inhibiting SS
         e_screensaver_deactivate();
         e_screensaver_update();
+        e_dpms_force_update();
      }
 err:
    return reply;
@@ -327,6 +329,7 @@ e_msgbus_screensaver_inhibit_remove(unsigned int cookie)
      {
         // stop inhibiting SS
         e_screensaver_update();
+        e_dpms_force_update();
      }
 }
 
diff --git a/src/bin/e_screensaver.c b/src/bin/e_screensaver.c
index 855049993..98bd77377 100644
--- a/src/bin/e_screensaver.c
+++ b/src/bin/e_screensaver.c
@@ -118,7 +118,7 @@ e_screensaver_force_update(void)
              unsigned int x_standby = 0, x_suspend = 0, x_off = 0;
              unsigned int standby = 0, suspend = 0, off = 0;
 
-             if (e_config->screensaver_enable != x_dpms)
+             if (e_dpms_actual != x_dpms)
                {
                   printf("SCRSV: someone else messed with screen dpms!\n");
                   ecore_x_dpms_enabled_set(e_config->screensaver_enable);
@@ -147,6 +147,12 @@ e_screensaver_force_update(void)
 #endif
 }
 
+E_API int
+e_screensaver_current_timeout_get(void)
+{
+   return _e_screensaver_timeout_get();
+}
+
 E_API void
 e_screensaver_update(void)
 {
diff --git a/src/bin/e_screensaver.h b/src/bin/e_screensaver.h
index 9db8e7ff3..1ffecc52b 100644
--- a/src/bin/e_screensaver.h
+++ b/src/bin/e_screensaver.h
@@ -12,6 +12,7 @@ E_API void e_screensaver_unignore(void);
 E_API Eina_Bool e_screensaver_ignore_get(void);
 
 E_API void e_screensaver_force_update(void);
+E_API int  e_screensaver_current_timeout_get(void);
 E_API void e_screensaver_update(void);
 
 E_API int e_screensaver_timeout_get(Eina_Bool use_idle);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to