raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=251daa75154a8eaac07e3f9af9c1028999ddd33d

commit 251daa75154a8eaac07e3f9af9c1028999ddd33d
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Mon Nov 23 11:42:38 2015 +0900

    e - fix compositor fade out ghosting
    
    due to enabling manual rendering (and als animator frametiem to 10
    secons) in e_comp_canvas.c when screensaver is active (blanking is
    finished totallly - eg the fade to black) evas weill nto render the
    last frame of the animation - skipping it and not rendering another
    update until screensaver is disabled. this leaves a subtle ghost of
    pixel data which is 1 step before black on the screen (until dpms
    turns the monitor off).
    
    this fixes that. this delays enabling manual render for 1 more second
    after we have been told the screensaver is active. this is plenty of
    time to update all the way to black.
    
    @fix
---
 src/bin/e_comp_canvas.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/bin/e_comp_canvas.c b/src/bin/e_comp_canvas.c
index 97a2edc..a3d8401 100644
--- a/src/bin/e_comp_canvas.c
+++ b/src/bin/e_comp_canvas.c
@@ -2,12 +2,14 @@
 
 static Eina_List *handlers;
 static Ecore_Timer *timer_post_screensaver_lock = NULL;
+static Ecore_Timer *timer_post_screensaver_on = NULL;
 
 static void
 _e_comp_canvas_cb_del()
 {
    E_FREE_LIST(handlers, ecore_event_handler_del);
    E_FREE_FUNC(timer_post_screensaver_lock, ecore_timer_del);
+   E_FREE_FUNC(timer_post_screensaver_on, ecore_timer_del);
 }
 
 static void
@@ -155,13 +157,23 @@ _e_comp_cb_zone_change()
 
 ////////////////////////////////////
 
-static void
-_e_comp_canvas_screensaver_active(void *d EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
+static Eina_Bool
+_e_comp_cb_screensaver_active_delay(void *data EINA_UNUSED)
 {
-   /* thawed in _e_comp_screensaver_off() */
    ecore_animator_frametime_set(10.0);
    if (!e_comp->nocomp)
      ecore_evas_manual_render_set(e_comp->ee, EINA_TRUE);
+   timer_post_screensaver_on = NULL;
+   return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_e_comp_canvas_screensaver_active(void *d EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
+{
+   if (timer_post_screensaver_on) return;
+   /* thawed in _e_comp_screensaver_off() */
+   timer_post_screensaver_on = ecore_timer_add
+     (1.0, _e_comp_cb_screensaver_active_delay, NULL);
 }
 
 static Eina_Bool
@@ -192,6 +204,7 @@ static Eina_Bool
 _e_comp_cb_screensaver_off()
 {
    E_FREE_FUNC(timer_post_screensaver_lock, ecore_timer_del);
+   E_FREE_FUNC(timer_post_screensaver_on, ecore_timer_del);
    return ECORE_CALLBACK_PASS_ON;
 }
 ////////////////////////////////////

-- 


Reply via email to