From: Kim Shinwoo <kimcinoo.efl@gmail.com>
authorKim Shinwoo <kimcinoo.efl@gmail.com>
Mon, 3 Sep 2012 08:44:53 +0000 (08:44 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Mon, 3 Sep 2012 08:44:53 +0000 (08:44 +0000)
Subject: [E-devel] [patch][elementary] access - add activate callback

till now, accessibility has used ecore_x_mouse_*_send(). the patch has
activate callback which takes place of the ecore_x_mouse_*_send() stuff.
if the access module is enabled and 'double tap' is detected, elm_win
will
receive ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL message with
ECORE_X_ATOME_E_ILLUME_ACCESS_ACTION_ACTIVATE and call the activate
callback for the accessibility. that's it.

SVN revision: 75978

ChangeLog
src/lib/elm_access.c
src/lib/elm_button.c
src/lib/elm_widget.h
src/lib/elm_win.c

index ad0e8fd..e9734f8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
         * Fix re-order animation when it doesn't end correctly.
         * Improve elm map module loading to onlt init the module needed
         when searching and not all modules.
+
+2012-09-03  Shinwoo Kim (kimcinoo)
+
+       * Add in more access subsystem features like activation cb.
+
index 4fcf087..2cb95ce 100644 (file)
@@ -290,6 +290,29 @@ _elm_access_on_highlight_hook_set(Elm_Access_Info           *ac,
     ac->on_highlight_data = data;
 }
 
+EAPI void
+_elm_access_activate_hook_set(Elm_Access_Info        *ac,
+                              Elm_Access_Activate_Cb  func,
+                              void                   *data)
+{
+    if (!ac) return;
+    ac->activate = func;
+    ac->activate_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_Access_Info *ac = evas_object_data_get(highlight_obj, "_elm_access");
+   if (!ac) return;
+
+   if (ac->activate)
+     ac->activate(highlight_obj, ac->activate_data);
+}
+
 EAPI char *
 _elm_access_text_get(const Elm_Access_Info *ac, int type, Evas_Object *obj, Elm_Widget_Item *item)
 {
index c47daff..12a88cd 100644 (file)
@@ -258,6 +258,13 @@ _access_state_cb(void *data __UNUSED__,
 }
 
 static void
+_access_activate_cb(Evas_Object *obj, void *data __UNUSED__)
+{
+   evas_object_smart_callback_call(obj, SIG_CLICKED, NULL);
+   elm_layout_signal_emit(obj, "elm,anim,activate", "elm");
+}
+
+static void
 _elm_button_smart_add(Evas_Object *obj)
 {
    EVAS_SMART_DATA_ALLOC(obj, Elm_Button_Smart_Data);
@@ -281,6 +288,8 @@ _elm_button_smart_add(Evas_Object *obj)
      (_elm_access_object_get(obj), ELM_ACCESS_INFO, _access_info_cb, NULL);
    _elm_access_callback_set
      (_elm_access_object_get(obj), ELM_ACCESS_STATE, _access_state_cb, priv);
+   _elm_access_activate_hook_set
+     (_elm_access_object_get(obj), _access_activate_cb, NULL);
 
    elm_widget_can_focus_set(obj, EINA_TRUE);
 
index c86319b..86fe1fe 100644 (file)
@@ -546,6 +546,7 @@ typedef Eina_Bool             (*Elm_Widget_Del_Pre_Cb)(void *data);
 
 typedef char *(*Elm_Access_Content_Cb)(void *data, Evas_Object *obj, Elm_Widget_Item *item);
 typedef void (*Elm_Access_On_Highlight_Cb)(void *data);
+typedef void (*Elm_Access_Activate_Cb)(Evas_Object *obj, void *data);
 
 struct _Elm_Access_Item
 {
@@ -561,6 +562,8 @@ struct _Elm_Access_Info
    Ecore_Timer               *delay_timer;
    void                      *on_highlight_data;
    Elm_Access_On_Highlight_Cb on_highlight;
+   void                      *activate_data;
+   Elm_Access_Activate_Cb     activate;
 };
 
 EAPI void             _elm_access_clear(Elm_Access_Info *ac);
@@ -583,6 +586,8 @@ EAPI Evas_Object *    _elm_access_edje_object_part_object_register(Evas_Object *
 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_activate_hook_set(Elm_Access_Info *ac, Elm_Access_Activate_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
index e1a9745..45d9363 100644 (file)
@@ -1857,7 +1857,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)