summaryrefslogtreecommitdiff
path: root/src/lib/ecore
diff options
context:
space:
mode:
authorDaniel Juyung Seo <seojuyung2@gmail.com>2013-11-26 15:58:24 +0900
committerDaniel Juyung Seo <seojuyung2@gmail.com>2013-11-26 17:09:37 +0900
commite78c4e68f54e4b154ceb4601d67a2782a3c8e4aa (patch)
tree52e1efa67ec247836f7e0516cb9bfdd50835027b /src/lib/ecore
parent55d8156414012e718a7e7adb3f9cd33e19744dc1 (diff)
Ecore animator: delete animater's internal timer in _end_tick() in all cases.
When the ecore_animator_source_set() is called with different sources repeatedly, sometimes internal timer is not deleted and this leads animator misbehavior. Especially when the source is changed from ECORE_ANIMATOR_SOURCE_TIMER to ECORE_ANIMATOR_SOURCE_CUSTOM before the SOURCE_TIMER's internal timer is deleted, this problem occurs. In this case, even though _end_tick() is called in ecore_animator_source_set(), the SOURCE_TIMER's timer is not deleted because the source is already changed to CUSTOM. So we should delete the internal timer in _end_tick() in all cases.
Diffstat (limited to 'src/lib/ecore')
-rw-r--r--src/lib/ecore/ecore_anim.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/src/lib/ecore/ecore_anim.c b/src/lib/ecore/ecore_anim.c
index 5e99eaeed7..7b33f71385 100644
--- a/src/lib/ecore/ecore_anim.c
+++ b/src/lib/ecore/ecore_anim.c
@@ -88,23 +88,15 @@ _end_tick(void)
88{ 88{
89 if (!ticking) return; 89 if (!ticking) return;
90 ticking = 0; 90 ticking = 0;
91 switch (src)
92 {
93 case ECORE_ANIMATOR_SOURCE_TIMER:
94 if (timer)
95 {
96 _ecore_timer_del(timer);
97 timer = NULL;
98 }
99 break;
100 91
101 case ECORE_ANIMATOR_SOURCE_CUSTOM: 92 if (timer)
102 if (end_tick_cb) end_tick_cb((void *)end_tick_data); 93 {
103 break; 94 _ecore_timer_del(timer);
104 95 timer = NULL;
105 default:
106 break;
107 } 96 }
97
98 if ((src == ECORE_ANIMATOR_SOURCE_CUSTOM) && end_tick_cb)
99 end_tick_cb((void *)end_tick_data);
108} 100}
109 101
110static Eina_Bool 102static Eina_Bool