cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=71c8f1de27c17cd7cf249af16915295fe6fd7fc6

commit 71c8f1de27c17cd7cf249af16915295fe6fd7fc6
Author: thierry E <thie...@substantiel.fr>
Date:   Tue May 9 10:02:31 2017 -0700

    ecore_x: handle DPMS state for a more accurate idling evaluation.
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/ecore_x/ecore_x_screensaver.c | 41 ++++++++++++++++++++++++++++++++++-
 1 file changed, 40 insertions(+), 1 deletion(-)

diff --git a/src/lib/ecore_x/ecore_x_screensaver.c 
b/src/lib/ecore_x/ecore_x_screensaver.c
index 8c186ea..faaa625 100644
--- a/src/lib/ecore_x/ecore_x_screensaver.c
+++ b/src/lib/ecore_x/ecore_x_screensaver.c
@@ -43,6 +43,8 @@ ecore_x_screensaver_idle_time_get(void)
 {
 #ifdef ECORE_XSS
    XScreenSaverInfo *xss;
+   unsigned long _idle;
+   int dummy;
    int idle;
 
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
@@ -50,8 +52,45 @@ ecore_x_screensaver_idle_time_get(void)
    XScreenSaverQueryInfo(_ecore_x_disp,
                          RootWindow(_ecore_x_disp, DefaultScreen(
                                       _ecore_x_disp)), xss);
-   idle = xss->idle / 1000;
+
+   _idle = xss->idle;
    XFree(xss);
+   if (DPMSQueryExtension(_ecore_x_disp, &dummy, &dummy))
+     {
+        CARD16 standby, suspend, off;
+        CARD16 state;
+        BOOL onoff;
+
+        if (DPMSCapable(_ecore_x_disp))
+          {
+             DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
+             DPMSInfo(_ecore_x_disp, &state, &onoff);
+
+             if (onoff)
+               {
+                  switch (state)
+                    {
+                     case DPMSModeStandby:
+                        /* this check is a littlebit paranoid, but be sure */
+                        if (_idle < (unsigned) (standby * 1000))
+                          _idle += (standby * 1000);
+                        break;
+                     case DPMSModeSuspend:
+                        if (_idle < (unsigned) ((suspend + standby) * 1000))
+                          _idle += ((suspend + standby) * 1000);
+                        break;
+                     case DPMSModeOff:
+                        if (_idle < (unsigned) ((off + suspend + standby) * 
1000))
+                          _idle += ((off + suspend + standby) * 1000);
+                        break;
+                     case DPMSModeOn:
+                     default:
+                        break;
+                    }
+               }
+          }
+     }
+   idle = _idle / 1000;
 
    return idle;
 #else

-- 


Reply via email to