jaehwan pushed a commit to branch master.
commit a645c8afb3d047c74a70835e87552f47c9626583
Author: Jaehwan Kim <[email protected]>
Date: Mon Jul 1 20:17:30 2013 +0900
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/src/lib/elm_interface_scrollable.c
b/src/lib/elm_interface_scrollable.c
index 28c52c2..1aeb029 100644
--- a/src/lib/elm_interface_scrollable.c
+++ b/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/src/lib/elm_interface_scrollable.h
b/src/lib/elm_interface_scrollable.h
index 9e1a95f..98fa9b5 100644
--- a/src/lib/elm_interface_scrollable.h
+++ b/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
--
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev