aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCedric Bail <cedric@osg.samsung.com>2017-11-09 18:07:31 -0800
committerCedric Bail <cedric@osg.samsung.com>2017-11-09 18:07:31 -0800
commit3b7607d7f622ceaab7aa30790ce79b6792f230e1 (patch)
treea3e3fd67a218f394a96aadb50f6ede5eef1f43f8
parentecore_con: add support for EFL_MAIN with ecore_con support. (diff)
downloadefl-3b7607d7f622ceaab7aa30790ce79b6792f230e1.tar.gz
ecore_evas: improve ecore_evas fallback animator logic for legacy case.
In Enlightenment with internal window being WL window connected to the X11 backend, you end up with the later requiring the former to tick, even if the former do not have a proper animator source. To work around the problem when there is one backend that is not providing support for animator source, we do need to avoid switching on another window source as they could be linked somehow and we can not know.
-rw-r--r--src/lib/ecore_evas/ecore_evas.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index 77ab679107..11c043e606 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -3148,6 +3148,7 @@ _ecore_evas_tick_source_find(void)
Ecore_Evas *ee;
Eina_Bool source = EINA_FALSE;
+ // Check if we do have a potential tick source for legacy
EINA_INLIST_FOREACH(ecore_evases, ee)
if (!ee->deleted &&
ee->engine.func->fn_animator_register &&
@@ -3157,7 +3158,19 @@ _ecore_evas_tick_source_find(void)
break;
}
- // If no source is available for ticking, fallback to timer.
+ // If just one source require fallback, we can't be sure that
+ // we are not running enlightenment and that this source might
+ // actually be the true tick source of all other window. In
+ // that scenario, we have to forcefully fallback.
+ EINA_INLIST_FOREACH(ecore_evases, ee)
+ if (!ee->deleted &&
+ (!ee->engine.func->fn_animator_register ||
+ !ee->engine.func->fn_animator_unregister))
+ {
+ source = EINA_FALSE;
+ break;
+ }
+
if (!source)
{
ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);