From 3d52581f0e9f3af6e608fbd01f525231fec98e0a Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 19 Aug 2011 14:39:27 +0000 Subject: [PATCH] and start on allowing modified behavior when in access mode. ie turn it on and off. just settable by env var and config file for now. SVN revision: 62591 --- legacy/elementary/src/lib/elm_access.c | 78 +++++++++++++++++-- legacy/elementary/src/lib/elm_button.c | 9 ++- legacy/elementary/src/lib/elm_config.c | 3 + legacy/elementary/src/lib/elm_priv.h | 4 + legacy/elementary/src/lib/elm_widget.h | 1 + .../src/modules/access_output/mod.c | 1 + 6 files changed, 88 insertions(+), 8 deletions(-) diff --git a/legacy/elementary/src/lib/elm_access.c b/legacy/elementary/src/lib/elm_access.c index b32d22a995..7625805221 100644 --- a/legacy/elementary/src/lib/elm_access.c +++ b/legacy/elementary/src/lib/elm_access.c @@ -62,16 +62,20 @@ _access_add_set(Elm_Access_Info *ac, int type) ac->items = eina_list_prepend(ac->items, ai); return ai; } + static Eina_Bool _access_obj_over_timeout_cb(void *data) { Elm_Access_Info *ac = evas_object_data_get(data, "_elm_access"); if (!ac) return EINA_FALSE; - _elm_access_read(ac, ELM_ACCESS_CANCEL, data, NULL); - _elm_access_read(ac, ELM_ACCESS_TYPE, data, NULL); - _elm_access_read(ac, ELM_ACCESS_INFO, data, NULL); - _elm_access_read(ac, ELM_ACCESS_STATE, data, NULL); - _elm_access_read(ac, ELM_ACCESS_DONE, data, NULL); + if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF) + { + _elm_access_read(ac, ELM_ACCESS_CANCEL, data, NULL); + _elm_access_read(ac, ELM_ACCESS_TYPE, data, NULL); + _elm_access_read(ac, ELM_ACCESS_INFO, data, NULL); + _elm_access_read(ac, ELM_ACCESS_STATE, data, NULL); + _elm_access_read(ac, ELM_ACCESS_DONE, data, NULL); + } ac->delay_timer = NULL; return EINA_FALSE; } @@ -87,7 +91,8 @@ _access_obj_mouse_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSE ecore_timer_del(ac->delay_timer); ac->delay_timer = NULL; } - ac->delay_timer = ecore_timer_add(0.2, _access_obj_over_timeout_cb, data); + if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF) + ac->delay_timer = ecore_timer_add(0.2, _access_obj_over_timeout_cb, data); } static void @@ -241,6 +246,22 @@ _elm_access_object_get(Evas_Object *obj) return evas_object_data_get(obj, "_elm_access"); } +EAPI void +_elm_access_object_hilight(Evas_Object *win, Evas_Object *obj) +{ + // if hilight obj doens exist - create and attach to window + // make sure its on a high layer + // show it and emit signal + // if exists, move and resize to obj object location + // ** try use dragables to specify pos+size?? +} + +EAPI void +_elm_access_object_unhilight(Evas_Object *win) +{ + // hide highlight obj is there, emit hide and then del when done +} + EAPI void _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj) { @@ -256,6 +277,51 @@ _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj) evas_object_data_set(obj, "_elm_access", ac); } +static void +_access_2nd_click_del_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Ecore_Timer *t; + + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL, + _access_2nd_click_del_cb, NULL); + t = evas_object_data_get(obj, "_elm_2nd_timeout"); + if (t) + { + ecore_timer_del(t); + evas_object_data_del(obj, "_elm_2nd_timeout"); + } +} + +static Eina_Bool +_access_2nd_click_timeout_cb(void *data) +{ + evas_object_event_callback_del_full(data, EVAS_CALLBACK_DEL, + _access_2nd_click_del_cb, NULL); + evas_object_data_del(data, "_elm_2nd_timeout"); + return EINA_FALSE; +} + +EAPI Eina_Bool +_elm_access_2nd_click_timeout(Evas_Object *obj) +{ + Ecore_Timer *t; + + t = evas_object_data_get(obj, "_elm_2nd_timeout"); + if (t) + { + ecore_timer_del(t); + evas_object_data_del(obj, "_elm_2nd_timeout"); + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL, + _access_2nd_click_del_cb, NULL); + return EINA_TRUE; + } + t = ecore_timer_add(0.3, _access_2nd_click_timeout_cb, obj); + evas_object_data_set(obj, "_elm_2nd_timeout", t); + evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, + _access_2nd_click_del_cb, NULL); + return EINA_FALSE; +} + // XXX special version for items //EAPI void //_elm_access_item_hover_register(Elm_Widget_Item *item, Evas_Object *hoverobj) diff --git a/legacy/elementary/src/lib/elm_button.c b/legacy/elementary/src/lib/elm_button.c index 04faaf9677..9bc6e77aa1 100644 --- a/legacy/elementary/src/lib/elm_button.c +++ b/legacy/elementary/src/lib/elm_button.c @@ -212,8 +212,13 @@ _activate(Evas_Object *obj) wd->timer = NULL; } wd->repeating = EINA_FALSE; - _elm_access_say(E_("Clicked")); - evas_object_smart_callback_call(obj, SIG_CLICKED, NULL); + if ((_elm_config->access_mode == ELM_ACCESS_MODE_OFF) || + (_elm_access_2nd_click_timeout(obj))) + { + if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF) + _elm_access_say(E_("Clicked")); + evas_object_smart_callback_call(obj, SIG_CLICKED, NULL); + } } static void diff --git a/legacy/elementary/src/lib/elm_config.c b/legacy/elementary/src/lib/elm_config.c index 350a330ca3..4955b15df5 100644 --- a/legacy/elementary/src/lib/elm_config.c +++ b/legacy/elementary/src/lib/elm_config.c @@ -611,6 +611,7 @@ _desc_init(void) ELM_CONFIG_VAL(D, T, glayer_line_angular_tolerance, T_DOUBLE); ELM_CONFIG_VAL(D, T, glayer_flick_time_limit_ms, T_INT); ELM_CONFIG_VAL(D, T, glayer_long_tap_start_timeout, T_DOUBLE); + ELM_CONFIG_VAL(D, T, access_mode, T_INT); #undef T #undef D #undef T_INT @@ -1638,6 +1639,8 @@ _env_get(void) s = getenv("ELM_DESKTOP_ENTRY"); if (s) _elm_config->desktop_entry = !!atoi(s); + s = getenv("ELM_ACCESS_MODE"); + if (s) _elm_config->access_mode = ELM_ACCESS_MODE_ON; } EAPI Eina_Bool diff --git a/legacy/elementary/src/lib/elm_priv.h b/legacy/elementary/src/lib/elm_priv.h index d5570ef9ca..3dc18f5599 100644 --- a/legacy/elementary/src/lib/elm_priv.h +++ b/legacy/elementary/src/lib/elm_priv.h @@ -82,6 +82,9 @@ extern const char *_elm_engines[]; #define ELM_FONT_TOKEN_STYLE ":style=" +#define ELM_ACCESS_MODE_OFF 0 +#define ELM_ACCESS_MODE_ON 1 + struct _Elm_Config { int config_version; @@ -140,6 +143,7 @@ struct _Elm_Config double glayer_line_angular_tolerance; unsigned int glayer_flick_time_limit_ms; double glayer_long_tap_start_timeout; + int access_mode; }; struct _Elm_Module diff --git a/legacy/elementary/src/lib/elm_widget.h b/legacy/elementary/src/lib/elm_widget.h index c35070fca6..3783c23ccc 100644 --- a/legacy/elementary/src/lib/elm_widget.h +++ b/legacy/elementary/src/lib/elm_widget.h @@ -232,6 +232,7 @@ EAPI void _elm_access_read(Elm_Access_Info *ac, int type, Evas_Objec EAPI void _elm_access_say(const char *txt); EAPI Elm_Access_Info *_elm_access_object_get(Evas_Object *obj); EAPI void _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj); +EAPI Eina_Bool _elm_access_2nd_click_timeout(Evas_Object *obj); struct _Elm_Widget_Item { diff --git a/legacy/elementary/src/modules/access_output/mod.c b/legacy/elementary/src/modules/access_output/mod.c index 79e97990dd..024cce9a4b 100644 --- a/legacy/elementary/src/modules/access_output/mod.c +++ b/legacy/elementary/src/modules/access_output/mod.c @@ -5,6 +5,7 @@ /* to enable this module export ELM_MODULES="access_output>access/api" +export ELM_ACCESS_MODE=1 */ static void (*cb_func) (void *data);