From: raster Date: Fri, 19 Aug 2011 14:39:27 +0000 (+0000) Subject: and start on allowing modified behavior when in access mode. ie turn X-Git-Tag: REL_F_I9500_20120323_1~17^2~1924 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=02bc18b218cd708a76245aace5058b3659939bc3;p=framework%2Fuifw%2Felementary.git 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. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@62591 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/elm_access.c b/src/lib/elm_access.c index b32d22a..7625805 100644 --- a/src/lib/elm_access.c +++ b/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 @@ -242,6 +247,22 @@ _elm_access_object_get(Evas_Object *obj) } 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) { Elm_Access_Info *ac; @@ -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/src/lib/elm_button.c b/src/lib/elm_button.c index 04faaf9..9bc6e77 100644 --- a/src/lib/elm_button.c +++ b/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/src/lib/elm_config.c b/src/lib/elm_config.c index 350a330..4955b15 100644 --- a/src/lib/elm_config.c +++ b/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/src/lib/elm_priv.h b/src/lib/elm_priv.h index d5570ef..3dc18f5 100644 --- a/src/lib/elm_priv.h +++ b/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/src/lib/elm_widget.h b/src/lib/elm_widget.h index c35070f..3783c23 100644 --- a/src/lib/elm_widget.h +++ b/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/src/modules/access_output/mod.c b/src/modules/access_output/mod.c index 79e9799..024cce9 100644 --- a/src/modules/access_output/mod.c +++ b/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);