From: Kim Shinwoo <kimcinoo.efl@gmail.com>

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
This commit is contained in:
Kim Shinwoo 2012-09-03 08:44:53 +00:00 committed by Carsten Haitzler
parent 1106692cdf
commit 0bbfd9fc0b
5 changed files with 43 additions and 1 deletions

View File

@ -442,3 +442,8 @@
* 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.

View 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)
{

View File

@ -257,6 +257,13 @@ _access_state_cb(void *data __UNUSED__,
return NULL;
}
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)
{
@ -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);

View 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

View 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)