forked from enlightenment/efl
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:
parent
66a489a14d
commit
c25006bd20
|
@ -117,8 +117,7 @@ _elm_pan_smart_resize(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||||
psd->h = h;
|
psd->h = h;
|
||||||
|
|
||||||
_elm_pan_update(psd);
|
_elm_pan_update(psd);
|
||||||
evas_object_smart_callback_call(psd->self, SIG_CHANGED,
|
evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
|
||||||
(void *)ELM_OBJ_PAN_SMART_RESIZE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -155,8 +154,7 @@ _elm_pan_pos_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||||
psd->py = y;
|
psd->py = y;
|
||||||
|
|
||||||
_elm_pan_update(psd);
|
_elm_pan_update(psd);
|
||||||
evas_object_smart_callback_call(psd->self, SIG_CHANGED,
|
evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
|
||||||
(void *)ELM_OBJ_PAN_POS_SET);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -266,8 +264,7 @@ _elm_pan_content_del_cb(void *data,
|
||||||
psd->content = NULL;
|
psd->content = NULL;
|
||||||
psd->content_w = psd->content_h = psd->px = psd->py =
|
psd->content_w = psd->content_h = psd->px = psd->py =
|
||||||
psd->prev_cw = psd->prev_ch = psd->delta_posx = psd->delta_posy = 0;
|
psd->prev_cw = psd->prev_ch = psd->delta_posx = psd->delta_posy = 0;
|
||||||
evas_object_smart_callback_call(psd->self, SIG_CHANGED,
|
evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
|
||||||
(void *)ELM_OBJ_PAN_CONTENT_DEL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -287,8 +284,7 @@ _elm_pan_content_resize_cb(void *data,
|
||||||
psd->content_h = h;
|
psd->content_h = h;
|
||||||
_elm_pan_update(psd);
|
_elm_pan_update(psd);
|
||||||
}
|
}
|
||||||
evas_object_smart_callback_call(psd->self, SIG_CHANGED,
|
evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
|
||||||
(void *)ELM_OBJ_PAN_CONTENT_RESIZE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -330,8 +326,7 @@ _elm_pan_content_set(Evas_Object *obj,
|
||||||
_elm_pan_update(psd);
|
_elm_pan_update(psd);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
evas_object_smart_callback_call(psd->self, SIG_CHANGED,
|
evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
|
||||||
(void *)ELM_OBJ_PAN_CONTENT_SET);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -3620,15 +3615,31 @@ _elm_scroll_scroll_bar_reset(Elm_Scrollable_Smart_Interface_Data *sid)
|
||||||
_elm_direction_arrows_eval(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 */
|
/* even external pan objects get this */
|
||||||
static void
|
static void
|
||||||
_elm_scroll_pan_changed_cb(void *data,
|
_elm_scroll_pan_changed_cb(void *data,
|
||||||
Evas_Object *obj __UNUSED__,
|
Evas_Object *obj __UNUSED__,
|
||||||
void *event_info)
|
void *event_info __UNUSED__)
|
||||||
{
|
{
|
||||||
Evas_Coord w, h;
|
Evas_Coord w, h;
|
||||||
Elm_Scrollable_Smart_Interface_Data *sid = data;
|
Elm_Scrollable_Smart_Interface_Data *sid = data;
|
||||||
Elm_Pan_Callback_Type type = (Elm_Pan_Callback_Type) event_info;
|
|
||||||
|
|
||||||
if (!sid->pan_obj) return;
|
if (!sid->pan_obj) return;
|
||||||
|
|
||||||
|
@ -3644,14 +3655,6 @@ _elm_scroll_pan_changed_cb(void *data,
|
||||||
sid->content_info.resized = EINA_TRUE;
|
sid->content_info.resized = EINA_TRUE;
|
||||||
_elm_scroll_wanted_region_set(sid->obj);
|
_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
|
static void
|
||||||
|
@ -3699,6 +3702,8 @@ _elm_scroll_content_set(Eo *obj, void *_pd, va_list *list)
|
||||||
sid->pan_obj = o;
|
sid->pan_obj = o;
|
||||||
evas_object_smart_callback_add
|
evas_object_smart_callback_add
|
||||||
(o, SIG_CHANGED, _elm_scroll_pan_changed_cb, sid);
|
(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);
|
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
|
evas_object_smart_callback_del
|
||||||
(sid->pan_obj, SIG_CHANGED, _elm_scroll_pan_changed_cb);
|
(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)
|
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;
|
sid->extern_pan = EINA_TRUE;
|
||||||
evas_object_smart_callback_add
|
evas_object_smart_callback_add
|
||||||
(sid->pan_obj, SIG_CHANGED, _elm_scroll_pan_changed_cb, sid);
|
(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
|
edje_object_part_swallow
|
||||||
(sid->edje_obj, "elm.swallow.content", sid->pan_obj);
|
(sid->edje_obj, "elm.swallow.content", sid->pan_obj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,16 +34,6 @@
|
||||||
#define ELM_OBJ_PAN_CLASS elm_obj_pan_eo_class_get()
|
#define ELM_OBJ_PAN_CLASS elm_obj_pan_eo_class_get()
|
||||||
const Eo_Class *elm_obj_pan_eo_class_get(void) EINA_CONST;
|
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;
|
extern EAPI Eo_Op ELM_OBJ_PAN_BASE_ID;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
|
Loading…
Reference in New Issue