From 99dd752b109ccd0c4ecd277b50801146d42aa173 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 26 Nov 2020 02:45:28 +0000 Subject: 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 d7fcdb83f6..5bc95267f0 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 c28439c506..5a6fd930d0 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)) { -- cgit v1.2.1