Index: src/lib/elm_widget.c
===================================================================
--- src/lib/elm_widget.c	(리비전 82270)
+++ src/lib/elm_widget.c	(작업 사본)
@@ -610,7 +610,7 @@ _propagate_event(void *data,
 static void
 _elm_widget_focus_region_show(const Evas_Object *obj)
 {
-   Evas_Coord x, y, w, h, ox, oy;
+   Evas_Coord x, y, ox, oy, w, h;
    Evas_Object *o;
 
    API_ENTRY return;
@@ -621,29 +621,45 @@ _elm_widget_focus_region_show(const Evas
    if (!elm_widget_focus_region_get(obj, &x, &y, &w, &h))
      return;
 
-   evas_object_geometry_get(obj, &ox, &oy, NULL, NULL);
-
    while (o)
      {
-        Evas_Coord px, py;
+        Evas_Coord px, py, pw, ph;
+        evas_object_geometry_get(o, &px, &py, &pw, &ph);
 
         if (_elm_scrollable_is(o))
           {
-             eo_do(o, elm_scrollable_interface_content_region_show(x, y, w, h));
-
-             if (!elm_widget_focus_region_get(o, &x, &y, &w, &h))
+             Evas_Coord rx, ry;
+             if ((px <= ox) && ((ox + w) <= (px + pw)) &&
+                 (py <= oy) && ((oy + h) <= (py + ph)))
                {
+                  // if object is already shown
                   o = elm_widget_parent_get(o);
                   continue;
                }
+             else if ((ox + w) > (px + pw) ||
+                      (oy + h) > (py + ph))
+               {
+                  // if object is under the viewport.
+                  x += w - pw;
+                  y += h - ph;
+               }
+
+             eo_do(o, elm_scrollable_interface_content_pos_get(&rx, &ry));
+             eo_do(o, elm_scrollable_interface_content_viewport_size_get(&w, &h));
+
+             x += rx + ox - px;
+             y += ry + oy - py;
+
+             eo_do(o, elm_scrollable_interface_content_region_show(x, y, w, h));
+             x = 0;
+             y = 0;
           }
         else
           {
-             evas_object_geometry_get(o, &px, &py, NULL, NULL);
-             x += ox - px;
-             y += oy - py;
              ox = px;
              oy = py;
+             w = pw;
+             h = ph;
           }
         o = elm_widget_parent_get(o);
      }
@@ -673,7 +689,6 @@ _parent_focus(Evas_Object *obj)
      {
         sd->focused = EINA_TRUE;
         eo_do(obj, elm_wdg_on_focus(NULL));
-        _elm_widget_focus_region_show(obj);
      }
    sd->focus_order_on_calc = EINA_FALSE;
 
@@ -2997,6 +3012,7 @@ _elm_widget_focus_steal(Eo *obj, void *_
           }
      }
    _parent_focus(obj);
+   _elm_widget_focus_region_show(obj);
    return;
 }
 
