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.
This commit is contained in:
Jaehwan Kim 2013-07-01 20:17:30 +09:00
parent 66a489a14d
commit c25006bd20
2 changed files with 29 additions and 30 deletions

View File

@ -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);
}

View File

@ -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