From c25006bd20aea7b609460a8150f88e006b2c1c11 Mon Sep 17 00:00:00 2001 From: Jaehwan Kim Date: Mon, 1 Jul 2013 20:17:30 +0900 Subject: [PATCH] Fix the timing which the content_viewport_resize callback is called. It is proper when the EVAS_CALLBACK_RESIZE is called instead of _pan_smart_resize. When the _pan_smart_resize is called, the geometry of an object is not changed. So the widget use the signal can miss-calculate the size. --- .../src/lib/elm_interface_scrollable.c | 49 +++++++++++-------- .../src/lib/elm_interface_scrollable.h | 10 ---- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/legacy/elementary/src/lib/elm_interface_scrollable.c b/legacy/elementary/src/lib/elm_interface_scrollable.c index 28c52c2975..1aeb02923a 100644 --- a/legacy/elementary/src/lib/elm_interface_scrollable.c +++ b/legacy/elementary/src/lib/elm_interface_scrollable.c @@ -117,8 +117,7 @@ _elm_pan_smart_resize(Eo *obj EINA_UNUSED, void *_pd, va_list *list) psd->h = h; _elm_pan_update(psd); - evas_object_smart_callback_call(psd->self, SIG_CHANGED, - (void *)ELM_OBJ_PAN_SMART_RESIZE); + evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL); } static void @@ -155,8 +154,7 @@ _elm_pan_pos_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) psd->py = y; _elm_pan_update(psd); - evas_object_smart_callback_call(psd->self, SIG_CHANGED, - (void *)ELM_OBJ_PAN_POS_SET); + evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL); } static void @@ -266,8 +264,7 @@ _elm_pan_content_del_cb(void *data, psd->content = NULL; psd->content_w = psd->content_h = psd->px = psd->py = psd->prev_cw = psd->prev_ch = psd->delta_posx = psd->delta_posy = 0; - evas_object_smart_callback_call(psd->self, SIG_CHANGED, - (void *)ELM_OBJ_PAN_CONTENT_DEL); + evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL); } static void @@ -287,8 +284,7 @@ _elm_pan_content_resize_cb(void *data, psd->content_h = h; _elm_pan_update(psd); } - evas_object_smart_callback_call(psd->self, SIG_CHANGED, - (void *)ELM_OBJ_PAN_CONTENT_RESIZE); + evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL); } static void @@ -330,8 +326,7 @@ _elm_pan_content_set(Evas_Object *obj, _elm_pan_update(psd); end: - evas_object_smart_callback_call(psd->self, SIG_CHANGED, - (void *)ELM_OBJ_PAN_CONTENT_SET); + evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL); } static void @@ -3620,15 +3615,31 @@ _elm_scroll_scroll_bar_reset(Elm_Scrollable_Smart_Interface_Data *sid) _elm_direction_arrows_eval(sid); } +static void +_elm_scroll_pan_resized_cb(void *data, + Evas *e __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Coord w, h; + Elm_Scrollable_Smart_Interface_Data *sid = data; + + if (sid->cb_func.content_viewport_resize) + { + eo_do(sid->obj, + elm_scrollable_interface_content_viewport_size_get(&w, &h)); + sid->cb_func.content_viewport_resize(sid->obj, w, h); + } +} + /* even external pan objects get this */ static void _elm_scroll_pan_changed_cb(void *data, Evas_Object *obj __UNUSED__, - void *event_info) + void *event_info __UNUSED__) { Evas_Coord w, h; Elm_Scrollable_Smart_Interface_Data *sid = data; - Elm_Pan_Callback_Type type = (Elm_Pan_Callback_Type) event_info; if (!sid->pan_obj) return; @@ -3644,14 +3655,6 @@ _elm_scroll_pan_changed_cb(void *data, sid->content_info.resized = EINA_TRUE; _elm_scroll_wanted_region_set(sid->obj); } - - if (type == ELM_OBJ_PAN_SMART_RESIZE) - if (sid->cb_func.content_viewport_resize) - { - eo_do(sid->obj, elm_scrollable_interface_content_viewport_size_get(&w, &h)); - sid->cb_func.content_viewport_resize(obj, w, h); - } - } static void @@ -3699,6 +3702,8 @@ _elm_scroll_content_set(Eo *obj, void *_pd, va_list *list) sid->pan_obj = o; evas_object_smart_callback_add (o, SIG_CHANGED, _elm_scroll_pan_changed_cb, sid); + evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, + _elm_scroll_pan_resized_cb, sid); edje_object_part_swallow(sid->edje_obj, "elm.swallow.content", o); } @@ -3729,6 +3734,8 @@ _elm_scroll_extern_pan_set(Eo *obj, void *_pd, va_list *list) { evas_object_smart_callback_del (sid->pan_obj, SIG_CHANGED, _elm_scroll_pan_changed_cb); + evas_object_event_callback_del(sid->pan_obj, EVAS_CALLBACK_RESIZE, + _elm_scroll_pan_resized_cb); } if (sid->extern_pan) @@ -3759,6 +3766,8 @@ _elm_scroll_extern_pan_set(Eo *obj, void *_pd, va_list *list) sid->extern_pan = EINA_TRUE; evas_object_smart_callback_add (sid->pan_obj, SIG_CHANGED, _elm_scroll_pan_changed_cb, sid); + evas_object_event_callback_add(sid->pan_obj, EVAS_CALLBACK_RESIZE, + _elm_scroll_pan_resized_cb, sid); edje_object_part_swallow (sid->edje_obj, "elm.swallow.content", sid->pan_obj); } diff --git a/legacy/elementary/src/lib/elm_interface_scrollable.h b/legacy/elementary/src/lib/elm_interface_scrollable.h index 9e1a95feff..98fa9b5652 100644 --- a/legacy/elementary/src/lib/elm_interface_scrollable.h +++ b/legacy/elementary/src/lib/elm_interface_scrollable.h @@ -34,16 +34,6 @@ #define ELM_OBJ_PAN_CLASS elm_obj_pan_eo_class_get() const Eo_Class *elm_obj_pan_eo_class_get(void) EINA_CONST; -typedef enum _Elm_Pan_Callback_Type -{ - ELM_OBJ_PAN_SMART_RESIZE, - ELM_OBJ_PAN_POS_SET, - ELM_OBJ_PAN_CONTENT_DEL, - ELM_OBJ_PAN_CONTENT_RESIZE, - ELM_OBJ_PAN_CONTENT_SET, - ELM_OBJ_PAN_LAST -} Elm_Pan_Callback_Type; - extern EAPI Eo_Op ELM_OBJ_PAN_BASE_ID; enum