raster pushed a commit to branch master.

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

commit 99dd752b109ccd0c4ecd277b50801146d42aa173
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Thu Nov 26 02:45:28 2020 +0000

    blank+dim+screensave - stop toggling on and off with self-feeding events
    
    separate screen powersave oiut of core so it's used selectively inside
    powersave only for now. need api to get it for outside.
---
 src/bin/e_powersave.c   | 32 ++++++++++++++------------------
 src/bin/e_screensaver.c | 21 +++++++++++++++++++--
 2 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/src/bin/e_powersave.c b/src/bin/e_powersave.c
index d7fcdb83f..5bc95267f 100644
--- a/src/bin/e_powersave.c
+++ b/src/bin/e_powersave.c
@@ -115,7 +115,7 @@ E_API E_Powersave_Mode
 e_powersave_mode_get(void)
 {
    if (powersave_force) return powersave_mode_force;
-   if (powersave_screen) return powersave_mode_screen;
+//   if (powersave_screen) return powersave_mode_screen;
    return powersave_mode;
 }
 
@@ -144,6 +144,8 @@ e_powersave_mode_unforce(void)
    powersave_mode_force = E_POWERSAVE_MODE_NONE;
 }
 
+// XXX: need a get for this
+
 E_API void
 e_powersave_mode_screen_set(E_Powersave_Mode mode)
 {
@@ -151,11 +153,7 @@ e_powersave_mode_screen_set(E_Powersave_Mode mode)
    printf("PWSAVE SCREEN SET %i/%i\n", (int)mode, 
(int)E_POWERSAVE_MODE_FREEZE);
    powersave_screen = EINA_TRUE;
    powersave_mode_screen = mode;
-   if (!powersave_force)
-     {
-        _e_powersave_event_change_send(powersave_mode_screen);
-        _e_powersave_mode_eval();
-     }
+   _e_powersave_mode_eval();
 }
 
 E_API void
@@ -164,12 +162,8 @@ e_powersave_mode_screen_unset(void)
    if (!powersave_screen) return;
    printf("PWSAVE SCREEN UNSET\n");
    powersave_screen = EINA_FALSE;
-   if ((!powersave_force) && (powersave_mode_screen != powersave_mode))
-     {
-        _e_powersave_event_change_send(powersave_screen);
-        _e_powersave_mode_eval();
-     }
    powersave_mode_screen = E_POWERSAVE_MODE_NONE;
+   _e_powersave_mode_eval();
 }
 
 E_API E_Powersave_Sleeper *
@@ -212,11 +206,15 @@ e_powersave_sleeper_sleep(E_Powersave_Sleeper *sleeper, 
int poll_interval, Eina_
    if (!sleeper) return;
    if (allow_save)
      {
-        if (e_powersave_mode_get() == E_POWERSAVE_MODE_FREEZE)
+        E_Powersave_Mode pm = e_powersave_mode_get();
+
+        if (powersave_screen) pm = powersave_mode_screen;
+
+        if (pm == E_POWERSAVE_MODE_FREEZE)
           timf = 3600.0;
-        else if (e_powersave_mode_get() == E_POWERSAVE_MODE_EXTREME)
+        else if (pm == E_POWERSAVE_MODE_EXTREME)
           timf = (double)poll_interval / 2.0;
-        else if (e_powersave_mode_get() == E_POWERSAVE_MODE_HIGH)
+        else if (pm == E_POWERSAVE_MODE_HIGH)
           timf = (double)poll_interval / 4.0;
         else
           timf = (double)poll_interval / 8.0;
@@ -308,11 +306,9 @@ static void
 _e_powersave_mode_eval(void)
 {
    double t = 0.0;
-   E_Powersave_Mode mode;
-
-   if (powersave_force) mode = powersave_mode_force;
-   else mode = powersave_mode;
+   E_Powersave_Mode mode = e_powersave_mode_get();
 
+   if (powersave_screen) mode = powersave_mode_screen;
    switch (mode)
      {
       case E_POWERSAVE_MODE_NONE:
diff --git a/src/bin/e_screensaver.c b/src/bin/e_screensaver.c
index c28439c50..5a6fd930d 100644
--- a/src/bin/e_screensaver.c
+++ b/src/bin/e_screensaver.c
@@ -12,6 +12,9 @@ static Ecore_Event_Handler 
*_e_screensaver_handler_border_desk_set = NULL;
 static Ecore_Event_Handler *_e_screensaver_handler_desk_show = NULL;
 static Ecore_Event_Handler *_e_screensaver_handler_powersave = NULL;
 
+static int _e_screensaver_cfg_timeout = -1;
+static int _e_screensaver_cfg_dim = -1;
+
 static int _e_screensaver_timeout = 0;
 static int _e_screensaver_blanking = 0;
 static int _e_screensaver_expose = 0;
@@ -90,6 +93,21 @@ e_screensaver_update(void)
 {
    int timeout, interval = 0, blanking = 0, expose = 0;
    Eina_Bool changed = EINA_FALSE;
+   Eina_Bool real_changed = EINA_FALSE;
+   int dim_timeout = -1;
+   E_Powersave_Mode pm = e_powersave_mode_get();
+
+   if (pm > E_POWERSAVE_MODE_LOW)
+     dim_timeout = e_config->backlight.battery_timer;
+   else
+     dim_timeout = e_config->backlight.timer;
+
+   if (_e_screensaver_cfg_timeout != e_config->screensaver_timeout)
+     real_changed = EINA_TRUE;
+   else if (_e_screensaver_cfg_dim != dim_timeout)
+     real_changed = EINA_TRUE;
+   _e_screensaver_cfg_timeout = e_config->screensaver_timeout;
+   _e_screensaver_cfg_dim = dim_timeout;
 
    timeout = e_screensaver_timeout_get(EINA_TRUE);
    if (!((e_config->screensaver_enable) &&
@@ -131,7 +149,7 @@ e_screensaver_update(void)
              // screen doesn't turn off at all because x thinks internally
              // that the monitor is still off... so this is odd, but it's
              // necessary on some hardware.
-             if (!e_config->screensaver_dpms_off)
+             if ((real_changed) && (!e_config->screensaver_dpms_off))
                {
                   ecore_x_dpms_enabled_set(!e_config->screensaver_enable);
                   ecore_x_dpms_enabled_set(e_config->screensaver_enable);
@@ -170,7 +188,6 @@ _e_screensaver_suspend_cb(void *data EINA_UNUSED)
 static Eina_Bool
 _e_screensaver_handler_powersave_cb(void *data EINA_UNUSED, int type 
EINA_UNUSED, void *event EINA_UNUSED)
 {
-   _e_screensaver_timeout = -1;
    e_screensaver_update();
    if ((e_config->screensaver_suspend) && (_e_screensaver_on))
      {

-- 


Reply via email to