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

Reply via email to