diff options
author | Sung-jae Park <nicesj.park@samsung.com> | 2013-04-12 13:16:37 +0900 |
---|---|---|
committer | Sung-jae Park <nicesj.park@samsung.com> | 2013-04-12 13:16:37 +0900 |
commit | a4fd48e6ab5721290d427adbd1f6cafb0ee22f57 (patch) | |
tree | 24ae79e0144798474d59913daac5e35ccc77ee4c | |
parent | b8b590b7b904c051dee64c28ebb1396485d013e0 (diff) | |
download | livebox-edje-a4fd48e6ab5721290d427adbd1f6cafb0ee22f57.tar.gz livebox-edje-a4fd48e6ab5721290d427adbd1f6cafb0ee22f57.tar.bz2 livebox-edje-a4fd48e6ab5721290d427adbd1f6cafb0ee22f57.zip |
Update accessibility event handling codes.
ACTIVATE accessibilty event is implemented.
It has to send mouse event to focused object to activate it.
Change-Id: Ibe5efe1c6a6fd559182a08482f54648f88a31076
-rw-r--r-- | packaging/liblivebox-edje.spec | 2 | ||||
-rw-r--r-- | src/script_port.c | 192 |
2 files changed, 118 insertions, 76 deletions
diff --git a/packaging/liblivebox-edje.spec b/packaging/liblivebox-edje.spec index be4cb85..0d823c6 100644 --- a/packaging/liblivebox-edje.spec +++ b/packaging/liblivebox-edje.spec @@ -1,6 +1,6 @@ Name: liblivebox-edje Summary: EDJE Script loader for the data provider master -Version: 0.5.0 +Version: 0.5.1 Release: 1 Group: HomeTF/Livebox License: Flora License diff --git a/src/script_port.c b/src/script_port.c index 33fabbc..4080f79 100644 --- a/src/script_port.c +++ b/src/script_port.c @@ -173,6 +173,45 @@ PUBLIC int script_update_color(void *h, Evas *e, const char *id, const char *par return LB_STATUS_SUCCESS; } +static void activate_cb(void *data, Evas_Object *part_obj, Elm_Object_Item *item) +{ + Evas_Object *ao; + Evas_Object *edje; + Evas *e; + int x; + int y; + int w; + int h; + struct timeval tv; + double timestamp; + + ao = evas_object_data_get(part_obj, "ao"); + if (!ao) + return; + + edje = evas_object_data_get(ao, "edje"); + if (!edje) + return; + + e = evas_object_evas_get(part_obj); + evas_object_geometry_get(part_obj, &x, &y, &w, &h); + x += w / 2; + y += h / 2; + + if (gettimeofday(&tv, NULL) < 0) { + ErrPrint("Failed to get time\n"); + timestamp = 0.0f; + } else { + timestamp = (double)tv.tv_sec + ((double)tv.tv_usec / 1000000.0f); + } + + DbgPrint("Cursor is on %dx%d\n", x, y); + evas_event_feed_mouse_move(e, x, y, timestamp, NULL); + evas_event_feed_mouse_down(e, 1, EVAS_BUTTON_NONE, timestamp + 0.01f, NULL); + evas_event_feed_mouse_move(e, x, y, timestamp + 0.02f, NULL); + evas_event_feed_mouse_up(e, 1, EVAS_BUTTON_NONE, timestamp + 0.03f, NULL); +} + PUBLIC int script_update_text(void *h, Evas *e, const char *id, const char *part, const char *text) { struct obj_info *obj_info; @@ -192,42 +231,60 @@ PUBLIC int script_update_text(void *h, Evas *e, const char *id, const char *part return LB_STATUS_ERROR_FAULT; } - elm_object_part_text_set(edje, part, text); + elm_object_part_text_set(edje, part, text ? text : ""); to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(edje), part); if (to) { Evas_Object *ao; + char *utf8; ao = evas_object_data_get(to, "ao"); - if (ao) { - /* Update Access Info */ - elm_access_info_set(ao, ELM_ACCESS_INFO, text); - DbgPrint("[%s] Update access info: (%s)\n", part, text); - } else { + if (!ao) { ao = elm_access_object_register(to, edje); if (!ao) { - ErrPrint("Failed to add access object\n"); - } else { - char *utf8; - utf8 = elm_entry_markup_to_utf8(text); - if (utf8) { - DbgPrint("[%s] Text is converted to [%s]\n", part, utf8); - elm_access_info_set(ao, ELM_ACCESS_INFO, utf8); - free(utf8); - } else { - DbgPrint("[%s] Unable to convert text to utf8: [%s]\n", part, text); - elm_access_info_set(ao, ELM_ACCESS_INFO, text); - } - - obj_info->access_chain = eina_list_append(obj_info->access_chain, ao); - evas_object_data_set(to, "ao", ao); - elm_object_focus_custom_chain_append(edje, ao, NULL); + ErrPrint("Unable to add ao: %s\n", part); + goto out; } + obj_info->access_chain = eina_list_append(obj_info->access_chain, ao); + evas_object_data_set(to, "ao", ao); + evas_object_data_set(ao, "edje", edje); + elm_access_activate_cb_set(ao, activate_cb, NULL); + elm_object_focus_custom_chain_append(edje, ao, NULL); + } + + if (!text || !strlen(text)) { + obj_info->access_chain = eina_list_remove(obj_info->access_chain, ao); + evas_object_data_del(to, "ao"); + evas_object_data_del(ao, "edje"); + elm_access_object_unregister(ao); + DbgPrint("[%s] Remove access object\n", part); + + rebuild_focus_chain(edje); + goto out; + } + + utf8 = elm_entry_markup_to_utf8(text); + if ((!utf8 || !strlen(utf8))) { + free(utf8); + + obj_info->access_chain = eina_list_remove(obj_info->access_chain, ao); + evas_object_data_del(to, "ao"); + evas_object_data_del(ao, "edje"); + elm_access_object_unregister(ao); + DbgPrint("[%s] Remove access object\n", part); + + rebuild_focus_chain(edje); + goto out; } + + elm_access_info_set(ao, ELM_ACCESS_INFO, utf8); + DbgPrint("[%s] Update access object (%s)\n", part, utf8); + free(utf8); } else { ErrPrint("Unable to get text part[%s]\n", part); } +out: return LB_STATUS_SUCCESS; } @@ -453,8 +510,18 @@ PUBLIC int script_update_access(void *_h, Evas *e, const char *id, const char *p ao = evas_object_data_get(to, "ao"); if (ao) { DbgPrint("[%s] Update access object (%s)\n", part, text); - elm_access_info_set(ao, ELM_ACCESS_INFO, text); - } else { + if (text && strlen(text)) { + elm_access_info_set(ao, ELM_ACCESS_INFO, text); + } else { + obj_info->access_chain = eina_list_remove(obj_info->access_chain, ao); + evas_object_data_del(to, "ao"); + evas_object_data_del(ao, "edje"); + elm_access_object_unregister(ao); + DbgPrint("Successfully unregistered\n"); + + rebuild_focus_chain(edje); + } + } else if (text && strlen(text)) { ao = elm_access_object_register(to, edje); if (!ao) { ErrPrint("Unable to register access object\n"); @@ -464,6 +531,8 @@ PUBLIC int script_update_access(void *_h, Evas *e, const char *id, const char *p evas_object_data_set(to, "ao", ao); elm_object_focus_custom_chain_append(edje, ao, NULL); DbgPrint("[%s] Register access info: (%s)\n", part, text); + evas_object_data_set(ao, "edje", edje); + elm_access_activate_cb_set(ao, activate_cb, NULL); } } } else { @@ -521,8 +590,9 @@ PUBLIC int script_update_image(void *_h, Evas *e, const char *id, const char *pa DbgPrint("delete object %s %p\n", part, img); ao = evas_object_data_del(img, "ao"); if (ao) { - elm_access_object_unregister(ao); obj_info->access_chain = eina_list_remove(obj_info->access_chain, ao); + evas_object_data_del(ao, "edje"); + elm_access_object_unregister(ao); DbgPrint("Successfully unregistered\n"); } evas_object_del(img); @@ -702,6 +772,7 @@ static void edje_del_cb(void *_info, Evas *e, Evas_Object *obj, void *event_info ao = evas_object_data_del(child->obj, "ao"); if (ao) { obj_info->access_chain = eina_list_remove(obj_info->access_chain, ao); + evas_object_data_del(ao, "edje"); elm_access_object_unregister(ao); } evas_object_del(child->obj); @@ -711,6 +782,7 @@ static void edje_del_cb(void *_info, Evas *e, Evas_Object *obj, void *event_info } EINA_LIST_FREE(obj_info->access_chain, ao) { + evas_object_data_del(ao, "edje"); elm_access_object_unregister(ao); } @@ -750,88 +822,57 @@ PUBLIC int script_feed_event(void *h, Evas *e, int event_type, int x, int y, dou if (event_type & LB_SCRIPT_ACCESS_EVENT) { Elm_Access_Action_Info *info; Elm_Access_Action_Type action; + const Eina_List *chain; - info = malloc(sizeof(*info)); + info = calloc(1, sizeof(*info)); if (!info) { ErrPrint("Error: %s\n", strerror(errno)); return LB_STATUS_ERROR_MEMORY; } - { - const Eina_List *chain; - chain = elm_object_focus_custom_chain_get(edje); - DbgPrint("Focus chain : %d\n", eina_list_count(chain)); - } + chain = elm_object_focus_custom_chain_get(edje); + DbgPrint("Focus chain : %d\n", eina_list_count(chain)); - switch (event_type) { - case LB_SCRIPT_ACCESS_HIGHLIGHT: /*!< LB_ACCESS_HIGHLIGHT */ + if ((event_type & LB_SCRIPT_ACCESS_HIGHLIGHT) == LB_SCRIPT_ACCESS_HIGHLIGHT) { action = ELM_ACCESS_ACTION_HIGHLIGHT; info->x = x; info->y = y; ret = elm_access_action(edje, action, info); DbgPrint("ACCESS_HIGHLIGHT: %dx%d returns %d\n", x, y, ret); - if (ret == EINA_FALSE) - ret = LB_ACCESS_STATUS_ERROR; - else - ret = LB_ACCESS_STATUS_DONE; - break; - case LB_SCRIPT_ACCESS_HIGHLIGHT_NEXT: /*!< LB_ACCESS_HIGHLIGHT_NEXT */ + ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + } else if ((event_type & LB_SCRIPT_ACCESS_HIGHLIGHT_NEXT) == LB_SCRIPT_ACCESS_HIGHLIGHT_NEXT) { action = ELM_ACCESS_ACTION_HIGHLIGHT_NEXT; info->highlight_cycle = EINA_FALSE; ret = elm_access_action(edje, action, info); DbgPrint("ACCESS_HIGHLIGHT_NEXT, returns %d\n", ret); - if (ret == EINA_FALSE) - ret = LB_ACCESS_STATUS_LAST; - else - ret = LB_ACCESS_STATUS_DONE; - break; - case LB_SCRIPT_ACCESS_HIGHLIGHT_PREV: /*!< LB_ACCESS_HIGHLIGHT_PREV */ + ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_LAST : LB_ACCESS_STATUS_DONE; + } else if ((event_type & LB_SCRIPT_ACCESS_HIGHLIGHT_PREV) == LB_SCRIPT_ACCESS_HIGHLIGHT_PREV) { action = ELM_ACCESS_ACTION_HIGHLIGHT_PREV; info->highlight_cycle = EINA_FALSE; ret = elm_access_action(edje, action, info); DbgPrint("ACCESS_HIGHLIGHT_PREV, returns %d\n", ret); - if (ret == EINA_FALSE) - ret = LB_ACCESS_STATUS_FIRST; - else - ret = LB_ACCESS_STATUS_DONE; - break; - case LB_SCRIPT_ACCESS_ACTIVATE: /*!< LB_ACCESS_ACTIVATE */ + ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_FIRST : LB_ACCESS_STATUS_DONE; + } else if ((event_type & LB_SCRIPT_ACCESS_ACTIVATE) == LB_SCRIPT_ACCESS_ACTIVATE) { action = ELM_ACCESS_ACTION_ACTIVATE; ret = elm_access_action(edje, action, info); DbgPrint("ACCESS_HIGHLIGHT_ACTIVATE, returns %d\n", ret); - if (ret == EINA_FALSE) - ret = LB_ACCESS_STATUS_ERROR; - else - ret = LB_ACCESS_STATUS_DONE; - break; - case LB_SCRIPT_ACCESS_VALUE_CHANGE: /*!< LB_ACCESS_VALUE_CHANGE */ + ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + } else if ((event_type & LB_SCRIPT_ACCESS_VALUE_CHANGE) == LB_SCRIPT_ACCESS_VALUE_CHANGE) { action = ELM_ACCESS_ACTION_VALUE_CHANGE; ret = elm_access_action(edje, action, info); DbgPrint("ACCESS_HIGHLIGHT_VALUE_CHANGE, returns %d\n", ret); - if (ret == EINA_FALSE) - ret = LB_ACCESS_STATUS_ERROR; - else - ret = LB_ACCESS_STATUS_DONE; - break; - case LB_SCRIPT_ACCESS_SCROLL: /*!< LB_ACCESS_SCROLL */ + ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + } else if ((event_type & LB_SCRIPT_ACCESS_SCROLL) == LB_SCRIPT_ACCESS_SCROLL) { action = ELM_ACCESS_ACTION_SCROLL; ret = elm_access_action(edje, action, info); DbgPrint("ACCESS_HIGHLIGHT_SCROLL, returns %d\n", ret); - if (ret == EINA_FALSE) - ret = LB_ACCESS_STATUS_ERROR; - else - ret = LB_ACCESS_STATUS_DONE; - break; - case LB_SCRIPT_ACCESS_UNHIGHLIGHT: + ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + } else if ((event_type & LB_SCRIPT_ACCESS_UNHIGHLIGHT) == LB_SCRIPT_ACCESS_UNHIGHLIGHT) { action = ELM_ACCESS_ACTION_UNHIGHLIGHT; ret = elm_access_action(edje, action, info); DbgPrint("ACCESS_UNHIGHLIGHT, returns %d\n", ret); - if (ret == EINA_FALSE) - ret = LB_ACCESS_STATUS_ERROR; - else - ret = LB_ACCESS_STATUS_DONE; - break; - default: + ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + } else { DbgPrint("Invalid event\n"); ret = LB_ACCESS_STATUS_ERROR; } @@ -1192,6 +1233,7 @@ static void access_cb(keynode_t *node, void *user_data) state = vconf_keynode_get_bool(node); } + DbgPrint("ELM CONFIG ACCESS: %d\n", state); elm_config_access_set(state); } |