Index: src/lib/elm_widget.c
===================================================================
--- src/lib/elm_widget.c	(리비전 82342)
+++ 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;
@@ -618,32 +618,48 @@ _elm_widget_focus_region_show(const Evas
    o = elm_widget_parent_get(obj);
    if (!o) return;
 
-   if (!elm_widget_focus_region_get(obj, &x, &y, &w, &h))
+   if (!elm_widget_focus_region_get(obj, &x, &y, NULL, NULL))
      return;
 
-   evas_object_geometry_get(obj, &ox, &oy, NULL, NULL);
+   evas_object_geometry_get(obj, &ox, &oy, &w, &h);
 
    while (o)
      {
-        Evas_Coord px, py;
-
         if (_elm_scrollable_is(o))
           {
-             eo_do(o, elm_scrollable_interface_content_region_show(x, y, w, h));
+             Evas_Coord px, py, pw, ph;
+             Evas_Coord rx, ry;
+
+             evas_object_geometry_get(o, &px, &py, &pw, &ph);
 
-             if (!elm_widget_focus_region_get(o, &x, &y, &w, &h))
+             if ((px <= ox) && (px + pw) >= (ox + w) &&
+                 (py <= oy) && (py + ph) >= (oy + h))
                {
+                  // if object is already shown
                   o = elm_widget_parent_get(o);
                   continue;
                }
-          }
-        else
-          {
-             evas_object_geometry_get(o, &px, &py, NULL, NULL);
-             x += ox - px;
-             y += oy - py;
-             ox = px;
-             oy = py;
+             else if ((px < ox) && ((px + pw) < (ox + w)))
+               {
+                  // if object is over the viewport to the x axis.
+                  x += w - pw;
+               }
+             else if ((py < oy) && ((py + ph) < (oy + h)))
+               {
+                  // if object is over the viewport to the y axis.
+                  y += h - ph;
+               }
+
+             ELM_SCROLLABLE_IFACE_GET(o, s_iface);
+             s_iface->content_pos_get(o, &rx, &ry);
+             s_iface->content_viewport_size_get(o, &w, &h);
+
+             x += rx + ox - px;
+             y += ry + oy - py;
+
+             s_iface->content_region_show(o, x, y, w, h);
+             x = 0;
+             y = 0;
           }
         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;
 }
 
