+/*!
+ LB_ACCESS_HIGHLIGHT 0
+ LB_ACCESS_HIGHLIGHT_NEXT 1
+ LB_ACCESS_HIGHLIGHT_PREV 2
+ LB_ACCESS_ACTIVATE 3
+ LB_ACCESS_VALUE_CHANGE 4
+ LB_ACCESS_SCROLL 5
+*/
+PUBLIC int script_feed_event(void *h, Evas *e, int event_type, int x, int y, int down, double timestamp)
+{
+ struct info *handle = h;
+ Evas_Object *edje;
+ struct obj_info *obj_info;
+ int ret = LB_STATUS_SUCCESS;
+
+ DbgPrint("event: %d, x: %d, y: %d\n", event_type, x, y);
+
+ edje = find_edje(handle, NULL); /*!< Get the base layout */
+ if (!edje) {
+ ErrPrint("Base layout is not exist\n");
+ return LB_STATUS_ERROR_NOT_EXIST;
+ }
+
+ obj_info = evas_object_data_get(edje, "obj_info");
+ if (!obj_info) {
+ ErrPrint("Object info is not valid\n");
+ return LB_STATUS_ERROR_INVALID;
+ }
+
+ if (event_type & LB_SCRIPT_ACCESS_EVENT) {
+ Elm_Access_Action_Info *info;
+ Elm_Access_Action_Type action;
+ const Eina_List *chain;
+
+ info = calloc(1, sizeof(*info));
+ if (!info) {
+ ErrPrint("Error: %s\n", strerror(errno));
+ return LB_STATUS_ERROR_MEMORY;
+ }
+
+ chain = elm_object_focus_custom_chain_get(edje);
+ DbgPrint("Focus chain : %d\n", eina_list_count(chain));
+
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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;
+ info->x = x;
+ info->y = y;
+ switch (down) {
+ case 0: info->mouse_type = 0; break;
+ case -1: info->mouse_type = 1; break;
+ case 1: info->mouse_type = 2; break;
+ default:
+ break;
+ }
+ ret = elm_access_action(edje, action, info);
+ DbgPrint("ACCESS_HIGHLIGHT_SCROLL, returns %d\n", ret);
+ 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);
+ ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE;
+ } else {
+ DbgPrint("Invalid event\n");
+ ret = LB_ACCESS_STATUS_ERROR;
+ }
+
+ free(info);
+ } else if (event_type & LB_SCRIPT_MOUSE_EVENT) {
+ switch (event_type) {
+ case LB_SCRIPT_MOUSE_DOWN:
+ evas_event_feed_mouse_move(e, x, y, timestamp, NULL);
+ evas_event_feed_mouse_down(e, 1, EVAS_BUTTON_NONE, timestamp + 0.01f, NULL);
+ break;
+ case LB_SCRIPT_MOUSE_MOVE:
+ evas_event_feed_mouse_move(e, x, y, timestamp, NULL);
+ break;
+ case LB_SCRIPT_MOUSE_UP:
+ evas_event_feed_mouse_move(e, x, y, timestamp, NULL);
+ evas_event_feed_mouse_up(e, 1, EVAS_BUTTON_NONE, timestamp + 0.1f, NULL);
+ break;
+ case LB_SCRIPT_MOUSE_IN:
+ evas_event_feed_mouse_in(e, timestamp, NULL);
+ break;
+ case LB_SCRIPT_MOUSE_OUT:
+ evas_event_feed_mouse_out(e, timestamp, NULL);
+ break;
+ default:
+ return LB_STATUS_ERROR_INVALID;
+ }
+ } else if (event_type & LB_SCRIPT_KEY_EVENT) {
+ DbgPrint("Key event is not implemented\n");
+ return LB_STATUS_ERROR_NOT_IMPLEMENTED;
+ }
+
+ return ret;
+}
+