Index: src/lib/elm_map.c
===================================================================
--- src/lib/elm_map.c	(리비전 71382)
+++ 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[]
 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 _
        {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;
+
+   if (!(wd->download_num) && !(wd->download_idler))
+      evas_object_smart_callback_call(wd->obj, SIG_LOADED, NULL);
+   wd->loaded_timer = 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
Index: src/bin/test_map.c
===================================================================
--- src/bin/test_map.c	(리비전 71375)
+++ src/bin/test_map.c	(작업 사본)
@@ -365,6 +365,12 @@ _map_zoom_change(void *data __UNUSED__,
 }
 
 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__)
 {
    printf("tile,load\n");
@@ -1058,6 +1064,7 @@ test_map(void *data __UNUSED__, Evas_Obj
         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);
