From d18ab78f156de1e8f0ce2456494a4077920dbcc2 Mon Sep 17 00:00:00 2001 From: raster 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. git-svn-id: https://svn.enlightenment.org/svn/e/trunk/elementary@62591 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/elm_access.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++---- src/lib/elm_button.c | 9 ++++-- src/lib/elm_config.c | 2 ++ src/lib/elm_priv.h | 3 ++ src/lib/elm_widget.h | 1 + 5 files changed, 85 insertions(+), 8 deletions(-) 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 402346e..0e7601b 100644 --- a/src/lib/elm_button.c +++ b/src/lib/elm_button.c @@ -306,8 +306,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 4b97512..f67a163 100644 --- a/src/lib/elm_config.c +++ b/src/lib/elm_config.c @@ -1669,6 +1669,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 912e2ba..4a63c57 100644 --- a/src/lib/elm_priv.h +++ b/src/lib/elm_priv.h @@ -76,6 +76,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; diff --git a/src/lib/elm_widget.h b/src/lib/elm_widget.h index 2938db7..eb5c395 100644 --- a/src/lib/elm_widget.h +++ b/src/lib/elm_widget.h @@ -233,6 +233,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); #define ELM_WIDGET_ITEM Elm_Widget_Item base /**< put this as the first member in your widget item struct */ struct _Elm_Widget_Item -- 2.7.4