diff --git a/legacy/elementary/src/lib/elm_interface_scrollable.c b/legacy/elementary/src/lib/elm_interface_scrollable.c index 30f19d1ea8..0a21041fd8 100644 --- a/legacy/elementary/src/lib/elm_interface_scrollable.c +++ b/legacy/elementary/src/lib/elm_interface_scrollable.c @@ -1449,6 +1449,7 @@ _elm_scroll_bounce_eval(Elm_Scrollable_Smart_Interface_Data *sid) if (sid->down.hold_active) { sid->down.hold_active = EINA_FALSE; + ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del); ELM_SAFE_FREE(sid->down.hold_job, ecore_job_del); if (sid->content_info.resized) _elm_scroll_wanted_region_set(sid->obj); @@ -1772,6 +1773,7 @@ _elm_scroll_content_region_show_internal(Evas_Object *obj, if (sid->down.hold_active) { sid->down.hold_active = EINA_FALSE; + ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del); ELM_SAFE_FREE(sid->down.hold_job, ecore_job_del); _elm_scroll_drag_stop(sid); if (sid->content_info.resized) @@ -2587,6 +2589,7 @@ _elm_scroll_mouse_up_event_cb(void *data, if (sid->down.hold_active) { sid->down.hold_active = EINA_FALSE; + ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del); ELM_SAFE_FREE(sid->down.hold_job, ecore_job_del); if (sid->content_info.resized) _elm_scroll_wanted_region_set(sid->obj); @@ -2672,6 +2675,7 @@ _elm_scroll_mouse_down_event_cb(void *data, } if (sid->down.hold_active) { + ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del); ELM_SAFE_FREE(sid->down.hold_job, ecore_job_del); _elm_scroll_drag_stop(sid); if (sid->content_info.resized) @@ -2875,7 +2879,7 @@ _elm_scroll_hold_job(void *data) Evas_Coord ox = 0, oy = 0, fx = 0, fy = 0; sid->down.hold_active = EINA_FALSE; - + fx = sid->down.hold_x; fy = sid->down.hold_y; @@ -2984,6 +2988,18 @@ _elm_scroll_hold_job(void *data) eo_do(sid->obj, elm_scrollable_interface_content_pos_set(ox, oy, EINA_TRUE)); } +static Eina_Bool +_elm_scroll_hold_animator(void *data) +{ + Elm_Scrollable_Smart_Interface_Data *sid = data; + + if (!sid->down.hold_job) + ecore_job_del(sid->down.hold_job); + sid->down.hold_job = + ecore_job_add(_elm_scroll_hold_job, sid); + return ECORE_CALLBACK_RENEW; +} + static Eina_Bool _elm_scroll_on_hold_animator(void *data) { @@ -3279,6 +3295,9 @@ _elm_scroll_mouse_move_event_cb(void *data, sid->down.hold_x = x; sid->down.hold_y = y; + if (!sid->down.hold_animator) + sid->down.hold_animator = + ecore_animator_add(_elm_scroll_hold_animator, sid); if (!sid->down.hold_job) ecore_job_del(sid->down.hold_job); sid->down.hold_job = @@ -4579,6 +4598,7 @@ _elm_scroll_interface_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) if (!sid->extern_pan) evas_object_del(sid->pan_obj); if (sid->down.hold_job) ecore_job_del(sid->down.hold_job); + if (sid->down.hold_animator) ecore_animator_del(sid->down.hold_animator); if (sid->down.onhold_animator) ecore_animator_del(sid->down.onhold_animator); if (sid->down.momentum_animator) ecore_animator_del(sid->down.momentum_animator); if (sid->down.bounce_x_animator) ecore_animator_del(sid->down.bounce_x_animator); diff --git a/legacy/elementary/src/lib/elm_interface_scrollable.h b/legacy/elementary/src/lib/elm_interface_scrollable.h index 5b03313c8f..49865c1036 100644 --- a/legacy/elementary/src/lib/elm_interface_scrollable.h +++ b/legacy/elementary/src/lib/elm_interface_scrollable.h @@ -1120,6 +1120,7 @@ struct _Elm_Scrollable_Smart_Interface_Data int hdir, vdir; Ecore_Job *hold_job; + Ecore_Animator *hold_animator; Ecore_Animator *onhold_animator; Ecore_Animator *momentum_animator; Ecore_Animator *bounce_x_animator;