diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index 3103d52ffe..11352f2702 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -97,3 +97,7 @@ * Add ability to use cnp helper code on non-elm widget objects by falling back to ecore-evas to get the window id. +2012-05-24 Tae-Hwan Kim (Bluezery) + + * Add "loaded" signal for elm_map. + diff --git a/legacy/elementary/src/bin/test_map.c b/legacy/elementary/src/bin/test_map.c index 0a2e0b8e36..643f66dea8 100644 --- a/legacy/elementary/src/bin/test_map.c +++ b/legacy/elementary/src/bin/test_map.c @@ -364,6 +364,12 @@ _map_zoom_change(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event _bubble_parking_follow(obj); } +static void +_map_loaded(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("loaded\n"); +} + static void _map_tile_load(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { @@ -1058,6 +1064,7 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __ evas_object_smart_callback_add(map, "zoom,start", _map_zoom_start, map); evas_object_smart_callback_add(map, "zoom,stop", _map_zoom_stop, map); evas_object_smart_callback_add(map, "zoom,change", _map_zoom_change, map); + evas_object_smart_callback_add(map, "loaded", _map_loaded, map); evas_object_smart_callback_add(map, "tile,load", _map_tile_load, map); evas_object_smart_callback_add(map, "tile,loaded", _map_tile_loaded, map); evas_object_smart_callback_add(map, "tile,loaded,fail", _map_tile_loaded_fail, map); diff --git a/legacy/elementary/src/lib/elm_map.c b/legacy/elementary/src/lib/elm_map.c index 5e3e0dc9dd..4ecc6327f6 100644 --- a/legacy/elementary/src/lib/elm_map.c +++ b/legacy/elementary/src/lib/elm_map.c @@ -410,6 +410,8 @@ struct _Widget_Data Ecore_Timer *zoom_timer; Ecore_Animator *zoom_animator; + Ecore_Timer *loaded_timer; + int try_num; int finish_num; int download_num; @@ -513,6 +515,7 @@ static const char SIG_SCROLL_ANIM_STOP[] = "scroll,anim,stop"; static const char SIG_ZOOM_START[] = "zoom,start"; static const char SIG_ZOOM_STOP[] = "zoom,stop"; static const char SIG_ZOOM_CHANGE[] = "zoom,change"; +static const char SIG_LOADED[] = "loaded"; static const char SIG_TILE_LOAD[] = "tile,load"; static const char SIG_TILE_LOADED[] = "tile,loaded"; static const char SIG_TILE_LOADED_FAIL[] = "tile,loaded,fail"; @@ -536,6 +539,7 @@ static const Evas_Smart_Cb_Description _signals[] = { {SIG_ZOOM_START, ""}, {SIG_ZOOM_STOP, ""}, {SIG_ZOOM_CHANGE, ""}, + {SIG_LOADED, ""}, {SIG_TILE_LOAD, ""}, {SIG_TILE_LOADED, ""}, {SIG_TILE_LOADED_FAIL, ""}, @@ -735,6 +739,18 @@ _grid_item_in_viewport(Grid_Item *gi) return ELM_RECTS_INTERSECT(x, y, w, h, vx, vy, vw, vh); } +static Eina_Bool +_loaded_timeout(void *data) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + Widget_Data *wd = data; + + wd->loaded_timer = NULL; + if (!(wd->download_num) && !(wd->download_idler)) + evas_object_smart_callback_call(wd->obj, SIG_LOADED, NULL); + return ECORE_CALLBACK_CANCEL; +} + static void _grid_item_update(Grid_Item *gi) { @@ -761,6 +777,9 @@ _grid_item_update(Grid_Item *gi) _obj_rotate(gi->wd, gi->img); gi->file_have = EINA_TRUE; } + + if (gi->wd->loaded_timer) ecore_timer_del(gi->wd->loaded_timer); + gi->wd->loaded_timer = ecore_timer_add(0.25, _loaded_timeout, gi->wd); } static void @@ -3692,6 +3711,11 @@ _del_hook(Evas_Object *obj) Widget_Data *wd = elm_widget_data_get(obj); EINA_SAFETY_ON_NULL_RETURN(wd); + if (wd->loaded_timer) + { + ecore_timer_del(wd->loaded_timer); + wd->loaded_timer = NULL; + } if (wd->map) evas_map_free(wd->map); free(wd); } diff --git a/legacy/elementary/src/lib/elm_map.h b/legacy/elementary/src/lib/elm_map.h index 383c183c4e..b46974f834 100644 --- a/legacy/elementary/src/lib/elm_map.h +++ b/legacy/elementary/src/lib/elm_map.h @@ -42,6 +42,7 @@ * - "name,loaded" - Name request ends. * - "name,loaded,fail" - Name request fails. * - "overlay,clicked" - A overlay is clicked. + * - "loaded" - when a map is finally loaded. * * Available style for map widget: * - @c "default"