From 57d899ad1787e487beb42c12244c4ad0a8f983fe Mon Sep 17 00:00:00 2001 From: Sung-jae Park Date: Fri, 24 May 2013 13:44:50 +0900 Subject: [PATCH] Add event type for accessibility (buffer type) [model] Redwood [binary_type] AP [customer] Docomo / Orange / Open [issue#] None [problem] None [cause] None [solution] Add new event types for accessibility [team] HomeTF [request] [horizontal_expansion] Change-Id: If2424b4870450d6b59960b001be35eefd256caef --- include/livebox.h | 11 +++ packaging/liblivebox.spec | 2 +- src/virtual_window.c | 171 ++++++++++++++++++++-------------------------- 3 files changed, 85 insertions(+), 99 deletions(-) diff --git a/include/livebox.h b/include/livebox.h index 417f687..05dcfe6 100644 --- a/include/livebox.h +++ b/include/livebox.h @@ -170,6 +170,17 @@ enum buffer_event { BUFFER_EVENT_KEY_DOWN, /*!< Key down */ BUFFER_EVENT_KEY_UP, /*!< Key up */ + + BUFFER_EVENT_HIGHLIGHT, + BUFFER_EVENT_HIGHLIGHT_NEXT, + BUFFER_EVENT_HIGHLIGHT_PREV, + BUFFER_EVENT_ACTIVATE, + BUFFER_EVENT_ACTION_UP, + BUFFER_EVENT_ACTION_DOWN, + BUFFER_EVENT_SCROLL_UP, + BUFFER_EVENT_SCROLL_MOVE, + BUFFER_EVENT_SCROLL_DOWN, + BUFFER_EVENT_UNHIGHLIGHT, }; #endif diff --git a/packaging/liblivebox.spec b/packaging/liblivebox.spec index 2ef5466..be71a5b 100644 --- a/packaging/liblivebox.spec +++ b/packaging/liblivebox.spec @@ -1,6 +1,6 @@ Name: liblivebox Summary: Library for the development of a livebox -Version: 0.3.0 +Version: 0.3.1 Release: 1 Group: HomeTF/Livebox License: Flora License diff --git a/src/virtual_window.c b/src/virtual_window.c index 30ffe40..6f6d658 100644 --- a/src/virtual_window.c +++ b/src/virtual_window.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -21,8 +22,6 @@ struct info { struct livebox_buffer *handle; /*!< Livebox buffer handle */ Evas_Object *window; /*!< Parent evas object - WARN: Incompatible with the elm_win object */ int is_hw; /*!< 1 if a buffer is created on the H/W accelerated place or 0 */ - - Evas_Object *elm_parent; }; /*! @@ -31,10 +30,12 @@ struct info { */ static int event_handler_cb(struct livebox_buffer *handler, enum buffer_event evt, double timestamp, double x, double y, void *data) { - Elm_Access_Action_Info *info; - Elm_Access_Action_Type action; struct info *info = data; + Elm_Access_Action_Info action_info; + Elm_Access_Action_Type action_type; Evas *e; + Ecore_Evas *ee; + Evas_Object *parent_elm; int ix; int iy; @@ -50,7 +51,11 @@ static int event_handler_cb(struct livebox_buffer *handler, enum buffer_event ev ix = info->width * x; iy = info->height * y; + memset(&action_info, 0, sizeof(action_info)); + e = evas_object_evas_get(info->window); + ee = ecore_evas_ecore_evas_get(e); + parent_elm = ecore_evas_data_get(ee, "parent,elm"); /*! * \note @@ -76,102 +81,77 @@ static int event_handler_cb(struct livebox_buffer *handler, enum buffer_event ev evas_event_feed_mouse_out(e, timestamp + 0.01f, NULL); /* + 0.1f just for fake event */ break; case BUFFER_EVENT_HIGHLIGHT: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - - action = ELM_ACCESS_ACTION_HIGHLIGHT; - info->x = x; - info->y = y; - ret = elm_access_action(info->elm_parent, 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; + if (!parent_elm) + break; + action_type = ELM_ACCESS_ACTION_HIGHLIGHT; + action_info.x = ix; + action_info.y = iy; + (void)elm_access_action(parent_elm, action_type, &action_info); break; case BUFFER_EVENT_HIGHLIGHT_NEXT: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - action = ELM_ACCESS_ACTION_HIGHLIGHT_NEXT; - info->highlight_cycle = EINA_FALSE; - ret = elm_access_action(info->elm_parent, action, info); - DbgPrint("ACCESS_HIGHLIGHT_NEXT, returns %d\n", ret); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_LAST : LB_ACCESS_STATUS_DONE; + if (!parent_elm) + break; + action_type = ELM_ACCESS_ACTION_HIGHLIGHT_NEXT; + action_info.highlight_cycle = EINA_FALSE; + (void)elm_access_action(parent_elm, action_type, &action_info); break; case BUFFER_EVENT_HIGHLIGHT_PREV: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - action = ELM_ACCESS_ACTION_HIGHLIGHT_PREV; - info->highlight_cycle = EINA_FALSE; - ret = elm_access_action(info->elm_parent, action, info); - DbgPrint("ACCESS_HIGHLIGHT_PREV, returns %d\n", ret); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_FIRST : LB_ACCESS_STATUS_DONE; + if (!parent_elm) + break; + action_type = ELM_ACCESS_ACTION_HIGHLIGHT_PREV; + action_info.highlight_cycle = EINA_FALSE; + (void)elm_access_action(parent_elm, action_type, &action_info); break; case BUFFER_EVENT_ACTIVATE: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - action = ELM_ACCESS_ACTION_ACTIVATE; - ret = elm_access_action(info->elm_parent, action, info); - DbgPrint("ACCESS_ACTIVATE, returns %d\n", ret); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + if (!parent_elm) + break; + action_type = ELM_ACCESS_ACTION_ACTIVATE; + (void)elm_access_action(parent_elm, action_type, &action_info); break; case BUFFER_EVENT_ACTION_UP: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - action = ELM_ACCESS_ACTION_UP; - ret = elm_access_action(info->elm_parent, action, info); - DbgPrint("ACCESS_ACTION(%d), returns %d\n", down, ret); + if (!parent_elm) + break; + action_type = ELM_ACCESS_ACTION_UP; + (void)elm_access_action(parent_elm, action_type, &action_info); break; case BUFFER_EVENT_ACTION_DOWN: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - action = ELM_ACCESS_ACTION_DOWN; - ret = elm_access_action(info->elm_parent, action, info); - DbgPrint("ACCESS_ACTION(%d), returns %d\n", down, ret); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + if (!parent_elm) + break; + action_type = ELM_ACCESS_ACTION_DOWN; + (void)elm_access_action(parent_elm, action_type, &action_info); break; case BUFFER_EVENT_SCROLL_UP: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - action = ELM_ACCESS_ACTION_SCROLL; - info->x = ix; - info->y = iy; - info->mouse_type = 0; - ret = elm_access_action(info->elm_parent, action, info); - DbgPrint("ACCESS_HIGHLIGHT_SCROLL, returns %d\n", ret); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + if (!parent_elm) + break; + action_type = ELM_ACCESS_ACTION_SCROLL; + action_info.x = ix; + action_info.y = iy; + action_info.mouse_type = 0; + (void)elm_access_action(parent_elm, action_type, &action_info); break; case BUFFER_EVENT_SCROLL_MOVE: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - action = ELM_ACCESS_ACTION_SCROLL; - info->x = ix; - info->y = iy; - info->mouse_type = -1; - ret = elm_access_action(info->elm_parent, action, info); - DbgPrint("ACCESS_HIGHLIGHT_SCROLL, returns %d\n", ret); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + if (!parent_elm) + break; + action_info.x = ix; + action_info.y = iy; + action_info.mouse_type = 1; + (void)elm_access_action(parent_elm, action_type, &action_info); break; case BUFFER_EVENT_SCROLL_DOWN: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - action = ELM_ACCESS_ACTION_SCROLL; - info->x = ix; - info->y = iy; - info->mouse_type = 1; - ret = elm_access_action(info->elm_parent, action, info); - DbgPrint("ACCESS_HIGHLIGHT_SCROLL, returns %d\n", ret); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + if (!parent_elm) + break; + action_info.mouse_type = 2; + (void)elm_access_action(parent_elm, action_type, &action_info); break; case BUFFER_EVENT_UNHIGHLIGHT: - if (!info->elm_parent) - return LB_ACCESS_STATUS_ERROR; - action = ELM_ACCESS_ACTION_UNHIGHLIGHT; - ret = elm_access_action(info->elm_parent, action, info); - DbgPrint("ACCESS_UNHIGHLIGHT, returns %d\n", ret); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; + if (!parent_elm) + break; + action_type = ELM_ACCESS_ACTION_UNHIGHLIGHT; + (void)elm_access_action(parent_elm, action_type, &action_info); break; default: LOGD("Unhandled buffer event (%d)\n", evt); - return -EINVAL; - } + break; return 0; } @@ -262,17 +242,13 @@ static void del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) Ecore_Evas *ee; struct info *info = data; - evas_object_del(obj, "info"); - ee = ecore_evas_ecore_evas_get(e); if (!ee) return; - LOGD("Try to release the ECORE_EVAS\n"); ecore_evas_free(ee); free(info->id); free(info); - LOGD("ECORE_EVAS is released\n"); } static void pre_render_cb(void *data, Evas *e, void *event_info) @@ -299,7 +275,7 @@ static void post_render_cb(void *data, Evas *e, void *event_info) livebox_sync_buffer(info->handle); } -PUBLIC Evas_Object *livebox_virtual_window_add(const char *id, int width, int height) +PUBLIC Evas_Object *virtual_window_create(const char *id, int width, int height) { Ecore_Evas *ee; Evas *e; @@ -352,29 +328,28 @@ PUBLIC Evas_Object *livebox_virtual_window_add(const char *id, int width, int he evas_object_color_set(info->window, 0, 0, 0, 0); evas_object_event_callback_add(info->window, EVAS_CALLBACK_DEL, del_cb, info); evas_object_event_callback_add(info->window, EVAS_CALLBACK_RESIZE, resize_cb, info); - evas_object_data_set(info->window, "info", info); return info->window; } -PUBLIC int livebox_virtual_window_set_parent_elm(Evas_Object *win, Evas_Object *parent_elm) +PUBLIC int virtual_window_set_parent_elm(Evas_Object *win, Evas_Object *parent) { - struct info *info; - info = evas_object_data_get(win, "info"); - if (!info) + Evas *e; + Ecore_Evas *ee; + + if (!win) return LB_STATUS_ERROR_INVALID; - if (info->parent_elm) - DbgPrint("Parent object will be replaced: %p\n", info->parent_elm); + e = evas_object_evas_get(win); + if (!e) + return LB_STATUS_ERROR_FAULT; - info->parent_elm = parent_elm; - return 0; -} + ee = ecore_evas_ecore_evas_get(e); + if (!ee) + return LB_STATUS_ERROR_FAULT; -PUBLIC int livebox_virtual_window_del(Evas_Object *virtual_win) -{ - evas_object_del(virtual_win); - return LB_STATUS_SUCCESS; + ecore_evas_data_set(ee, "parent,elm", parent); + return 0; } /* End of a file */ -- 2.7.4