Index: src/lib/elm_widget.h
===================================================================
--- src/lib/elm_widget.h	(리비전 71695)
+++ src/lib/elm_widget.h	(작업 사본)
@@ -544,6 +544,8 @@ EAPI void             _elm_access_object_register(
 EAPI void             _elm_access_item_unregister(Elm_Widget_Item *item);
 EAPI void             _elm_access_item_register(Elm_Widget_Item *item, Evas_Object *hoverobj);
 EAPI Eina_Bool        _elm_access_2nd_click_timeout(Evas_Object *obj);
+EAPI Evas_Object*     _elm_access_textblock_register(Evas_Object *obj, const Evas_Object *textblock, const char *text);
+EAPI void             _elm_access_highlight_set(Evas_Object* obj);
 
 /**< put this as the first member in your widget item struct */
 #define ELM_WIDGET_ITEM       Elm_Widget_Item base
Index: src/lib/elm_widget.c
===================================================================
--- src/lib/elm_widget.c	(리비전 71695)
+++ src/lib/elm_widget.c	(작업 사본)
@@ -839,6 +839,9 @@ _parent_focus(Evas_Object *obj)
         _elm_widget_focus_region_show(obj);
      }
    sd->focus_order_on_calc = EINA_FALSE;
+
+   if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
+     _elm_access_highlight_set(obj);
 }
 
 static void
Index: src/lib/elm_widget_layout.h
===================================================================
--- src/lib/elm_widget_layout.h	(리비전 71695)
+++ src/lib/elm_widget_layout.h	(작업 사본)
@@ -246,6 +246,7 @@ typedef struct _Elm_Layout_Smart_Data
    const char           *klass, *group;
 
    Eina_Bool             needs_size_calc : 1;
+   Eina_Bool             can_access : 1;
 } Elm_Layout_Smart_Data;
 
 /**
Index: src/lib/elm_layout.h
===================================================================
--- src/lib/elm_layout.h	(리비전 71695)
+++ src/lib/elm_layout.h	(작업 사본)
@@ -646,6 +646,22 @@ EAPI Eina_Bool                    elm_layout_part_
 EAPI Eina_Bool                    elm_layout_part_cursor_engine_only_get(const Evas_Object *obj, const char *part_name);
 
 /**
+ *
+ * Set accessibility to all of texblocks in the layout object
+ *
+ * @param obj The layout object.
+ * @param can_access makes all of textblocks in the layout @p obj possible
+ * to have accessibility. @c EINA_TRUE means textblock can be accessible
+ *
+ * @return EINA_TRUE on success or EINA_FALSE on failure. If @p obj is not
+ * a proper layout object, @c EINA_FALSE is returned.
+ *
+ * @ingroup Layout
+ */
+EAPI Eina_Bool
+elm_layout_textblock_access_set(Evas_Object *obj, Eina_Bool can_access);
+
+/**
  * Set the layout content.
  *
  * @param obj The layout object
Index: src/lib/elm_layout.c
===================================================================
--- src/lib/elm_layout.c	(리비전 71695)
+++ src/lib/elm_layout.c	(작업 사본)
@@ -655,6 +655,10 @@ _elm_layout_smart_text_set(Evas_Object *obj,
 
    ELM_LAYOUT_CLASS(ELM_WIDGET_DATA(sd)->api)->sizing_eval(obj);
 
+   if (_elm_config->access_mode == ELM_ACCESS_MODE_ON && sd->can_access)
+     sub_d->obj = _elm_access_textblock_register
+       (obj, edje_object_part_object_get(elm_layout_edje_get(obj), part), text);
+
    return EINA_TRUE;
 }
 
@@ -1772,6 +1776,16 @@ _elm_layout_widget_smart_set_user(Elm_Layout_Smart
    sc->text_aliases = _text_aliases;
 }
 
+EAPI Eina_Bool
+elm_layout_textblock_access_set(Evas_Object *obj, Eina_Bool can_access)
+{
+   ELM_LAYOUT_CHECK(obj) EINA_FALSE;
+   ELM_LAYOUT_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+   sd->can_access = !!can_access;
+   return EINA_TRUE;
+}
+
 /* And now the basic layout widget itself */
 EAPI Evas_Object *
 elm_layout_add(Evas_Object *parent)
Index: src/lib/elm_access.c
===================================================================
--- src/lib/elm_access.c	(리비전 71695)
+++ src/lib/elm_access.c	(작업 사본)
@@ -1,6 +1,36 @@
 #include <Elementary.h>
 #include "elm_priv.h"
+#include "elm_widget_layout.h"
 
+static const char ACCESS_SMART_NAME[] = "elm_access";
+
+EVAS_SMART_SUBCLASS_NEW
+  (ACCESS_SMART_NAME, _elm_access, Elm_Layout_Smart_Class,
+  Elm_Layout_Smart_Class, elm_layout_smart_class_get, NULL);
+
+static Evas_Object * _elm_access_add(Evas_Object *parent);
+
+static void
+_elm_access_smart_add(Evas_Object *obj)
+{
+   EVAS_SMART_DATA_ALLOC(obj, Elm_Widget_Smart_Data);
+   ELM_WIDGET_CLASS(_elm_access_parent_sc)->base.add(obj);
+
+   elm_widget_can_focus_set(obj, EINA_TRUE);
+}
+
+static void
+_elm_access_smart_set_user(Elm_Layout_Smart_Class *sc)
+{
+   ELM_WIDGET_CLASS(sc)->base.add = _elm_access_smart_add;
+
+   /* not a 'focus chain manager' */
+   ELM_WIDGET_CLASS(sc)->focus_next = NULL;
+   ELM_WIDGET_CLASS(sc)->focus_direction = NULL;
+
+   return;
+}
+
 typedef struct _Mod_Api Mod_Api;
 
 struct _Mod_Api
@@ -194,9 +224,12 @@ _access_obj_hilight_resize_cb(void *data __UNUSED_
    evas_object_resize(o, w, h);
 }
 
-
-
 //-------------------------------------------------------------------------//
+EAPI void
+_elm_access_highlight_set(Evas_Object* obj)
+{
+   _access_obj_over_timeout_cb(obj);
+}
 
 EAPI void
 _elm_access_clear(Elm_Access_Info *ac)
@@ -383,6 +416,71 @@ _elm_access_object_unhilight(Evas_Object *obj)
      }
 }
 
+static void
+_content_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj,
+                void *event_info __UNUSED__)
+{
+   Evas_Object *accessobj;
+   Evas_Coord w, h;
+
+   accessobj = data;
+   if (!accessobj) return;
+
+   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+   evas_object_resize(accessobj, w, h);
+}
+
+static void
+_content_move(void *data, Evas *e __UNUSED__, Evas_Object *obj,
+              void *event_info __UNUSED__)
+{
+   Evas_Object *accessobj;
+   Evas_Coord x, y;
+
+   accessobj = data;
+   if (!accessobj) return;
+
+   evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+   evas_object_move(accessobj, x, y);
+}
+
+static char *
+_access_info_cb(void *data __UNUSED__, Evas_Object *obj,
+                Elm_Widget_Item *item __UNUSED__)
+{
+   const char *txt = elm_widget_access_info_get(obj);
+   if (txt) return strdup(txt);
+   return NULL;
+}
+
+EAPI Evas_Object *
+_elm_access_textblock_register(Evas_Object* obj, const Evas_Object *textblock,
+                               const char* text)
+{
+   Evas_Object *ao;
+   Evas_Object *tb = (Evas_Object *)textblock;
+
+   if (!obj || !tb) return NULL;
+
+   // create access object
+   ao = _elm_access_add(obj);
+   evas_object_event_callback_add(tb, EVAS_CALLBACK_RESIZE,
+                                  _content_resize, ao);
+   evas_object_event_callback_add(tb, EVAS_CALLBACK_MOVE,
+                                  _content_move, ao);
+   evas_object_show(ao);
+
+   // register access object
+   _elm_access_object_register(ao, tb);
+   _elm_access_text_set(_elm_access_object_get(ao),
+                        ELM_ACCESS_TYPE, evas_object_type_get(tb));
+   _elm_access_callback_set(_elm_access_object_get(ao),
+                            ELM_ACCESS_INFO,
+                            _access_info_cb, NULL);
+   elm_widget_access_info_set(ao, text);
+
+   return ao;
+}
 EAPI void
 _elm_access_object_hilight_disable(Evas *e)
 {
@@ -534,3 +632,22 @@ _elm_access_2nd_click_timeout(Evas_Object *obj)
                                   _access_2nd_click_del_cb, NULL);
    return EINA_FALSE;
 }
+
+static Evas_Object *
+_elm_access_add(Evas_Object *parent)
+{
+   Evas *e;
+   Evas_Object *obj;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
+
+   e = evas_object_evas_get(parent);
+   if (!e) return NULL;
+
+   obj = evas_object_smart_add(e, _elm_access_smart_class_new());
+
+   if (!elm_widget_sub_object_add(parent, obj))
+     ERR("could not add %p as sub object of %p", obj, parent);
+
+   return obj;
+}
