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
This commit is contained in:
Carsten Haitzler 2011-08-19 14:39:27 +00:00
parent a3592b4da6
commit 3d52581f0e
6 changed files with 88 additions and 8 deletions

View File

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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
{

View File

@ -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);