From 366c1d9ab25f9fe9f115832df0f51be5f2015ac4 Mon Sep 17 00:00:00 2001 From: Prasoon Singh Date: Sat, 17 Sep 2016 16:04:03 +0530 Subject: [PATCH] [elm_gengrid] Accessibility: sort children list according to their x,y position for making highlight frame go left to right in horizontal case. Change-Id: Iddcd92f06ad80301aaa0cabd33dd3ece9e83ad77 Signed-off-by: Prasoon Singh --- src/lib/elm_gengrid.c | 48 ++++++++++++++++++++++++++++++++++++++++---- src/lib/elm_widget_gengrid.h | 3 +++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 9d503c0..d8a9434 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -98,7 +98,10 @@ static void _item_mouse_callbacks_add(Elm_Gen_Item *it, Evas_Object *view); static void _item_mouse_callbacks_del(Elm_Gen_Item *it, Evas_Object *view); static int _is_item_in_viewport(int viewport_x, int viewport_y, int viewport_w, int viewport_h, int obj_x, int obj_y, int obj_w, int obj_h); - +//TIZEN_ONLY (20160914) : Accessibility: sort children list according to their x,y position +static int _sort_items(const void *data1, const void *data2); +static Eina_Bool _atspi_enabled(); +// static const Elm_Action key_actions[] = { {"move", _key_action_move}, @@ -2021,6 +2024,12 @@ _elm_gengrid_pan_evas_object_smart_calculate(Eo *obj EINA_UNUSED, Elm_Gengrid_Pa if (sd->focused_item) _elm_widget_focus_highlight_start(psd->wobj); + + //TIZEN_ONLY (20160914) : Accessibility: sort children list according to their x,y position + if (_atspi_enabled() && sd->horizontal) + sd->atspi_children = eina_list_sort(sd->atspi_children, eina_list_count(sd->atspi_children), _sort_items); + // + } EOLIAN static void @@ -4292,6 +4301,10 @@ _elm_gengrid_item_new(Elm_Gengrid_Data *sd, (!strcmp(it->itc->item_style, "group_index")); sd->item_count++; + //TIZEN_ONLY (20160914) : Accessibility: sort children list according to their x,y position + sd->atspi_children = eina_list_append(sd->atspi_children, EO_OBJ(it)); + // + return it; } @@ -4444,6 +4457,11 @@ _elm_gengrid_elm_widget_atspi(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Eina_Bo Evas_Object *content = NULL; Eina_List *l; + //TIZEN_ONLY (20160914) : Accessibility: sort children list according to their x,y position + if (sd->horizontal && is_atspi) + sd->atspi_children = eina_list_sort(sd->atspi_children, eina_list_count(sd->atspi_children), _sort_items); + // + EINA_INLIST_FOREACH(sd->items, it) { if (!it->realized) continue; @@ -5915,14 +5933,35 @@ _elm_gengrid_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUS return &atspi_actions[0]; } +//TIZEN_ONLY (20160914) : Accessibility: sort children list according to their x,y position +static int _sort_items(const void *data1, const void *data2) +{ + const Eo *eo_it1 = data1; + const Eo *eo_it2 = data2; + ELM_GENGRID_ITEM_DATA_GET(eo_it1, it_data1); + ELM_GENGRID_ITEM_DATA_GET(eo_it2, it_data2); + + if (it_data1->y == it_data2->y) + return (it_data1->x <= it_data2->x) ? -1 : 1; + else + return (it_data1->y < it_data2->y) ? -1 : 1; +} +// + EOLIAN Eina_List* _elm_gengrid_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd) { Eina_List *ret = NULL; Elm_Gen_Item *it; - - EINA_INLIST_FOREACH(sd->items, it) - ret = eina_list_append(ret, EO_OBJ(it)); + //TIZEN_ONLY (20160914) : Accessibility: sort children list according to their x,y position + if (sd->horizontal) + ret = eina_list_clone(sd->atspi_children); + // + else + { + EINA_INLIST_FOREACH(sd->items, it) + ret = eina_list_append(ret, EO_OBJ(it)); + } return ret; } @@ -6147,5 +6186,6 @@ _elm_gengrid_elm_interface_scrollable_content_pos_set(Eo *obj, Elm_Gengrid_Data eo_do(EO_OBJ(next_previous_item), elm_interface_atspi_component_highlight_grab()); } } + #include "elm_gengrid.eo.c" #include "elm_gengrid_item.eo.c" diff --git a/src/lib/elm_widget_gengrid.h b/src/lib/elm_widget_gengrid.h index 7ba5713..70a8d9d 100644 --- a/src/lib/elm_widget_gengrid.h +++ b/src/lib/elm_widget_gengrid.h @@ -141,6 +141,9 @@ struct _Elm_Gengrid_Data int item_cache_count; int item_cache_max; Elm_Gen_Item *atspi_item_to_highlight; + //TIZEN_ONLY (20160914) : Accessibility: sort children list according to their x,y position + Eina_List *atspi_children; + // }; struct Elm_Gen_Item_Type -- 2.7.4