dpms - fix cases where screensavwr was off but dpms still on

@fix
This commit is contained in:
Carsten Haitzler 2023-02-16 22:48:43 +00:00
parent a6038af68f
commit 1cb02d3480
7 changed files with 35 additions and 5 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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");

View File

@ -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();
}
}

View File

@ -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)
{

View File

@ -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);