diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c index 769855d6ea..72e46992cd 100644 --- a/src/lib/ecore_evas/ecore_evas.c +++ b/src/lib/ecore_evas/ecore_evas.c @@ -175,6 +175,13 @@ _ecore_evas_idle_enter(void *data EINA_UNUSED) { if (ee->engine.func->fn_render) rend |= ee->engine.func->fn_render(ee); + /* + * Some engines that generate their own ticks based on hardware + * events need to know that render has been considered, and + * whether it will actually generate a new image or not + */ + if (ee->engine.func->fn_evas_changed) + ee->engine.func->fn_evas_changed(ee, rend); } #ifdef ECORE_EVAS_ASYNC_RENDER_DEBUG if ((ee->in_async_render) && (ee->async_render_start <= 0.0)) diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c b/src/lib/ecore_evas/ecore_evas_buffer.c index 795f5b77fc..deb2387001 100644 --- a/src/lib/ecore_evas/ecore_evas_buffer.c +++ b/src/lib/ecore_evas/ecore_evas_buffer.c @@ -606,6 +606,8 @@ static Ecore_Evas_Engine_Func _ecore_buffer_engine_func = NULL, // fn_animator_register NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; static void * diff --git a/src/lib/ecore_evas/ecore_evas_ews.c b/src/lib/ecore_evas/ecore_evas_ews.c index 904c5043fb..6f90654f6b 100644 --- a/src/lib/ecore_evas/ecore_evas_ews.c +++ b/src/lib/ecore_evas/ecore_evas_ews.c @@ -719,6 +719,8 @@ static const Ecore_Evas_Engine_Func _ecore_ews_engine_func = NULL, // fn_animator_register NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; void diff --git a/src/lib/ecore_evas/ecore_evas_private.h b/src/lib/ecore_evas/ecore_evas_private.h index 4eaa3696b7..ee75fd0782 100644 --- a/src/lib/ecore_evas/ecore_evas_private.h +++ b/src/lib/ecore_evas/ecore_evas_private.h @@ -156,6 +156,8 @@ struct _Ecore_Evas_Engine_Func void (*fn_animator_register) (Ecore_Evas *ee); void (*fn_animator_unregister)(Ecore_Evas *ee); + + void (*fn_evas_changed)(Ecore_Evas *ee, Eina_Bool changed); }; struct _Ecore_Evas_Interface diff --git a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c index 0624212cc8..98dca01082 100644 --- a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c +++ b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c @@ -673,7 +673,9 @@ static Ecore_Evas_Engine_Func _ecore_cocoa_engine_func = NULL, // fn_aux_hints_set NULL, // fn_animator_register - NULL // fn_animator_unregister + NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; static Ecore_Cocoa_Window * diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c index 0ba89685cc..59278aa4f2 100644 --- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c +++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c @@ -663,7 +663,9 @@ static Ecore_Evas_Engine_Func _ecore_evas_drm_engine_func = NULL, // aux_hints_set NULL, // animator_register - NULL // animator_unregister + NULL, // animator_unregister + + NULL // evas_changed }; EAPI Ecore_Evas * diff --git a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c index d705df3ee1..785f9cd0f4 100644 --- a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c +++ b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c @@ -913,7 +913,9 @@ static const Ecore_Evas_Engine_Func _ecore_extn_plug_engine_func = NULL, // aux_hints_set NULL, // fn_animator_register - NULL // fn_animator_unregister + NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; static Eina_Bool @@ -2078,6 +2080,8 @@ static const Ecore_Evas_Engine_Func _ecore_extn_socket_engine_func = NULL, // fn_animator_register NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; EAPI Ecore_Evas * diff --git a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c index 3ab06bb40e..558f82f752 100644 --- a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c +++ b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c @@ -641,7 +641,9 @@ static Ecore_Evas_Engine_Func _ecore_fb_engine_func = NULL, // aux_hints_set NULL, // fn_animator_register - NULL // fn_animator_unregister + NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; EAPI Ecore_Evas * diff --git a/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c b/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c index bd34e19fd1..7938dce2e5 100644 --- a/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c +++ b/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c @@ -463,7 +463,9 @@ static Ecore_Evas_Engine_Func _ecore_psl1ght_engine_func = NULL, // aux_hints_set NULL, // fn_animator_register - NULL // fn_animator_unregister + NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; EAPI Ecore_Evas * diff --git a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c index 9515e93a50..2382fdac44 100644 --- a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c +++ b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c @@ -552,7 +552,9 @@ static Ecore_Evas_Engine_Func _ecore_sdl_engine_func = NULL, // aux_hints_set NULL, // fn_animator_register - NULL // fn_animator_unregister + NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; static Ecore_Evas* diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c index c02619d010..305b095cea 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c @@ -115,7 +115,9 @@ static Ecore_Evas_Engine_Func _ecore_wl_engine_func = NULL, // aux_hints_set NULL, // fn_animator_register - NULL // fn_animator_unregister + NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; /* external variables */ diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c index 5f55b63bd4..4b3b492104 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c @@ -112,7 +112,9 @@ static Ecore_Evas_Engine_Func _ecore_wl_engine_func = NULL, // aux_hints_set NULL, // fn_animator_register - NULL // fn_animator_unregister + NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; /* external variables */ diff --git a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c index 0ac7017c6b..1187d5dba2 100644 --- a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c +++ b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c @@ -1203,7 +1203,9 @@ static Ecore_Evas_Engine_Func _ecore_win32_engine_func = NULL, // aux_hints_set NULL, // fn_animator_register - NULL // fn_animator_unregister + NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; #endif /* BUILD_ECORE_EVAS_WIN32 */ diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c b/src/modules/ecore_evas/engines/x/ecore_evas_x.c index a8226bd099..e3bfaa89f9 100644 --- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c +++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c @@ -3744,7 +3744,9 @@ static Ecore_Evas_Engine_Func _ecore_x_engine_func = _ecore_evas_x_aux_hints_set, NULL, // fn_animator_register - NULL // fn_animator_unregister + NULL, // fn_animator_unregister + + NULL, // fn_evas_changed }; /*