From 7d595adf7b2fb90ffc82805a99ed65a0ad3317cd Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 2 Sep 2012 07:37:24 +0000 Subject: [PATCH] work around x dpms bug which seems to forget about doing dpms 2nd time around so force a reset of screensaver/dpms settings after coming out of blank. SVN revision: 75940 --- src/bin/e_dpms.c | 19 +++++++++++++++++++ src/bin/e_dpms.h | 1 + src/bin/e_screensaver.c | 17 +++++++++++++++++ src/bin/e_screensaver.h | 1 + 4 files changed, 38 insertions(+) diff --git a/src/bin/e_dpms.c b/src/bin/e_dpms.c index aa27b162b..50c10e7d0 100644 --- a/src/bin/e_dpms.c +++ b/src/bin/e_dpms.c @@ -65,6 +65,25 @@ e_dpms_update(void) if (changed) ecore_x_dpms_timeouts_set(standby, suspend, off); } +EAPI void +e_dpms_force_update(void) +{ + unsigned int standby = 0, suspend = 0, off = 0; + int enabled; + + enabled = ((e_config->dpms_enable) && (!e_config->mode.presentation) && + (!e_util_fullscreen_curreny_any())); + ecore_x_dpms_enabled_set(enabled); + if (!enabled) return; + if (e_config->dpms_standby_enable) + standby = e_config->dpms_standby_timeout; + if (e_config->dpms_suspend_enable) + suspend = e_config->dpms_suspend_timeout; + if (e_config->dpms_off_enable) + off = e_config->dpms_off_timeout; + ecore_x_dpms_timeouts_set(standby, suspend, off); +} + static Eina_Bool _e_dpms_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) { diff --git a/src/bin/e_dpms.h b/src/bin/e_dpms.h index c1076d41c..80414dbc2 100644 --- a/src/bin/e_dpms.h +++ b/src/bin/e_dpms.h @@ -7,6 +7,7 @@ EINTERN int e_dpms_init(void); EINTERN int e_dpms_shutdown(void); EAPI void e_dpms_update(void); +EAPI void e_dpms_force_update(void); #endif #endif diff --git a/src/bin/e_screensaver.c b/src/bin/e_screensaver.c index 90ca17955..09f4472cc 100644 --- a/src/bin/e_screensaver.c +++ b/src/bin/e_screensaver.c @@ -60,6 +60,20 @@ e_screensaver_update(void) if (changed) ecore_x_screensaver_set(timeout, interval, blanking, expose); } +EAPI void +e_screensaver_force_update(void) +{ + int timeout = 0, count = (1 + _e_screensaver_ask_presentation_count); + + if ((e_config->screensaver_enable) && (!e_config->mode.presentation) && + (!e_util_fullscreen_curreny_any())) + timeout = e_config->screensaver_timeout * count; + ecore_x_screensaver_set(timeout, + e_config->screensaver_interval, + e_config->screensaver_blanking, + e_config->screensaver_expose); +} + static Eina_Bool _e_screensaver_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) { @@ -210,6 +224,9 @@ _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __U } else { + e_screensaver_force_update(); + e_dpms_force_update(); + _e_screensaver_on = EINA_FALSE; if (_e_screensaver_suspend_timer) { diff --git a/src/bin/e_screensaver.h b/src/bin/e_screensaver.h index bd42f9b6e..fdfec07b8 100644 --- a/src/bin/e_screensaver.h +++ b/src/bin/e_screensaver.h @@ -7,6 +7,7 @@ EINTERN int e_screensaver_init(void); EINTERN int e_screensaver_shutdown(void); EAPI void e_screensaver_update(void); +EAPI void e_screensaver_force_update(void); #endif #endif