Index: src/lib/elm_button.c
===================================================================
--- src/lib/elm_button.c	(revision 75926)
+++ src/lib/elm_button.c	(working copy)
@@ -73,6 +73,13 @@ _elm_button_smart_sizing_eval(Evas_Object *obj)
    evas_object_size_hint_min_set(obj, minw, minh);
 }
 
+static void
+_elm_button_smart_activate(Evas_Object *obj)
+{
+   evas_object_smart_callback_call(obj, SIG_CLICKED, NULL);
+   elm_layout_signal_emit(obj, "elm,anim,activate", "elm");
+}
+
 /* FIXME: replicated from elm_layout just because button's icon spot
  * is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
  * can changed the theme API */
@@ -303,6 +310,7 @@ _elm_button_smart_set_user(Elm_Button_Smart_Class
    ELM_CONTAINER_CLASS(sc)->content_set = _elm_button_smart_content_set;
 
    ELM_LAYOUT_CLASS(sc)->sizing_eval = _elm_button_smart_sizing_eval;
+   ELM_WIDGET_CLASS(sc)->activate = _elm_button_smart_activate;
 
    ELM_LAYOUT_CLASS(sc)->content_aliases = _content_aliases;
    ELM_LAYOUT_CLASS(sc)->text_aliases = _text_aliases;
Index: src/lib/elm_win.c
===================================================================
--- src/lib/elm_win.c	(revision 75926)
+++ src/lib/elm_win.c	(working copy)
@@ -1853,7 +1853,7 @@ _elm_win_client_message(void *data,
              else if ((unsigned int)e->data.l[1] ==
                       ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE)
                {
-                  // XXX: call right access func
+                  _elm_access_highlight_object_activate(ELM_WIDGET_DATA(sd)->obj);
                }
              else if ((unsigned int)e->data.l[1] ==
                       ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ)
Index: src/lib/elm_access.c
===================================================================
--- src/lib/elm_access.c	(revision 75926)
+++ src/lib/elm_access.c	(working copy)
@@ -290,6 +290,14 @@ _elm_access_on_highlight_hook_set(Elm_Access_Info
     ac->on_highlight_data = data;
 }
 
+EAPI void
+_elm_access_highlight_object_activate(Evas_Object *obj)
+{
+   Evas_Object *highlight_obj;
+   highlight_obj = elm_widget_focused_object_get(obj);
+   elm_widget_activate(highlight_obj);
+}
+
 EAPI char *
 _elm_access_text_get(const Elm_Access_Info *ac, int type, Evas_Object *obj, Elm_Widget_Item *item)
 {
Index: src/lib/elm_widget.c
===================================================================
--- src/lib/elm_widget.c	(revision 75926)
+++ src/lib/elm_widget.c	(working copy)
@@ -3506,6 +3506,16 @@ elm_widget_focus_order_get(const Evas_Object *obj)
    return sd->focus_order;
 }
 
+EAPI void 
+elm_widget_activate(Evas_Object *obj)
+{
+   API_ENTRY return;
+
+   if (!sd->api->activate) return;
+
+   sd->api->activate(obj);
+}
+
 /**
  * @internal
  *
Index: src/lib/elm_widget.h
===================================================================
--- src/lib/elm_widget.h	(revision 75926)
+++ src/lib/elm_widget.h	(working copy)
@@ -351,7 +351,7 @@
  */
 #define ELM_WIDGET_SMART_CLASS_INIT(smart_class_init)                        \
   {smart_class_init, ELM_WIDGET_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, \
-   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
+   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
 
 /**
  * @def ELM_WIDGET_SMART_CLASS_INIT_NULL
@@ -432,6 +432,7 @@ typedef struct _Elm_Widget_Smart_Class
                                       Evas_Object *sobj); /**< 'Virtual' function handling sub objects being removed */
    void             (*access)(Evas_Object *obj,
                               Eina_Bool is_access); /**< 'Virtual' function on the widget being set access */
+   void             (*activate)(Evas_Object *obj); /**< 'Virtual' function to activate widget  */
 } Elm_Widget_Smart_Class;
 
 /**
@@ -583,6 +584,7 @@ EAPI Evas_Object *    _elm_access_edje_object_part
 EAPI void             _elm_access_widget_item_register(Elm_Widget_Item *item);
 EAPI void             _elm_access_widget_item_unregister(Elm_Widget_Item *item);
 EAPI void             _elm_access_on_highlight_hook_set(Elm_Access_Info *ac, Elm_Access_On_Highlight_Cb func, void *data);
+EAPI void             _elm_access_highlight_object_activate(Evas_Object *obj);
 
 /**< put this as the first member in your widget item struct */
 #define ELM_WIDGET_ITEM       Elm_Widget_Item base
@@ -737,6 +739,7 @@ EAPI void             elm_widget_focus_mouse_up_ha
 EAPI void             elm_widget_focus_tree_unfocusable_handle(Evas_Object *obj);
 EAPI void             elm_widget_focus_disabled_handle(Evas_Object *obj);
 EAPI unsigned int     elm_widget_focus_order_get(const Evas_Object *obj);
+EAPI void             elm_widget_activate(Evas_Object *obj);
 EAPI void             elm_widget_text_part_set(Evas_Object *obj, const char *part, const char *label);
 EAPI const char      *elm_widget_text_part_get(const Evas_Object *obj, const char *part);
 EAPI void             elm_widget_domain_translatable_text_part_set(Evas_Object *obj, const char *part, const char *domain, const char *text);
