Merge "Region show on item elements fixed" into tizen
authorPrasoon Singh <prasoon.16@samsung.com>
Tue, 19 Apr 2016 05:44:37 +0000 (22:44 -0700)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Tue, 19 Apr 2016 05:44:37 +0000 (22:44 -0700)
40 files changed:
config/default/base.src.in
config/mobile/base.src.in
config/standard/base.src.in
src/lib/elc_ctxpopup.c
src/lib/elc_hoversel.c
src/lib/elc_naviframe.c
src/lib/elc_popup.c
src/lib/elm_access.c
src/lib/elm_access.eo
src/lib/elm_bg.c
src/lib/elm_color_item.eo
src/lib/elm_colorselector.c
src/lib/elm_colorselector.eo
src/lib/elm_ctxpopup_item.eo
src/lib/elm_gengrid.c
src/lib/elm_gengrid_item.eo
src/lib/elm_genlist.c
src/lib/elm_hover.c
src/lib/elm_hover.eo
src/lib/elm_icon.c
src/lib/elm_index.c
src/lib/elm_index.eo
src/lib/elm_index_item.eo
src/lib/elm_interface_atspi_accessible.eo
src/lib/elm_interface_atspi_accessible.h
src/lib/elm_interface_atspi_component.c
src/lib/elm_list.c
src/lib/elm_progressbar.c
src/lib/elm_progressbar.eo
src/lib/elm_spinner.c
src/lib/elm_spinner.eo
src/lib/elm_toolbar.c
src/lib/elm_toolbar_item.eo
src/lib/elm_widget.c
src/lib/elm_widget.eo
src/lib/elm_widget.h
src/lib/elm_widget_item.eo
src/lib/elm_widget_toolbar.h
src/lib/elm_win.c
src/tests/elm_test_atspi.c

index 188f41f..975529b 100644 (file)
@@ -535,6 +535,12 @@ group "Elm_Config" struct {
               value "action" string: "move";
               value "params" string: "down";
            }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Escape";
+              value "action" string: "escape";
+              value "params" string: "";
+           }
         }
      }
      group "Elm_Config_Bindings_Widget" struct {
index aea7ae2..0e1e161 100644 (file)
@@ -539,6 +539,12 @@ group "Elm_Config" struct {
               value "action" string: "move";
               value "params" string: "down";
            }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Escape";
+              value "action" string: "escape";
+              value "params" string: "";
+           }
         }
      }
      group "Elm_Config_Bindings_Widget" struct {
index 2d87884..5b41990 100644 (file)
@@ -536,6 +536,12 @@ group "Elm_Config" struct {
               value "action" string: "move";
               value "params" string: "down";
            }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Escape";
+              value "action" string: "escape";
+              value "params" string: "";
+           }
         }
      }
      group "Elm_Config_Bindings_Widget" struct {
index e0f4162..9ff96d8 100644 (file)
@@ -1297,11 +1297,14 @@ _elm_ctxpopup_horizontal_get(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd)
 }
 
 static void
-_item_wrap_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+_item_wrap_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
 {
    Elm_Ctxpopup_Item_Data *item = data;
    if (!item->wcb.org_func_cb) return;
    item->wcb.org_func_cb((void *)item->wcb.org_data, item->wcb.cobj, EO_OBJ(item));
+//TIZEN ONLY(20150710)ctxpopup: Accessible methods for children_get, extents_get and item name_get
+   eo_do(obj, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_MENU_ITEM));
+//
 }
 
 EOLIAN static Eo *
@@ -1527,5 +1530,25 @@ _elm_ctxpopup_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Ctxpopup
    return ret;
 }
 
+static Eina_Bool
+_item_action_activate(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+   ELM_CTXPOPUP_ITEM_DATA_GET(obj, item);
+
+   if (item->wcb.org_func_cb)
+     item->wcb.org_func_cb((void*)item->wcb.org_data, WIDGET(item), EO_OBJ(item));
+   return EINA_TRUE;
+}
+
+EOLIAN static const Elm_Atspi_Action*
+_elm_ctxpopup_item_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Item_Data *sd EINA_UNUSED)
+{
+   static Elm_Atspi_Action atspi_actions[] = {
+          { "activate", "activate", NULL, _item_action_activate},
+          { NULL, NULL, NULL, NULL }
+   };
+   return &atspi_actions[0];
+}
+
 #include "elm_ctxpopup_item.eo.c"
 #include "elm_ctxpopup.eo.c"
index d612801..877bfc5 100644 (file)
@@ -622,7 +622,7 @@ _elm_hoversel_eo_base_constructor(Eo *obj, Elm_Hoversel_Data *_pd EINA_UNUSED)
    eo_do(obj,
          evas_obj_type_set(MY_CLASS_NAME_LEGACY),
          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
-         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_GLASS_PANE));
+         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_COMBO_BOX));
 
    return obj;
 }
index 353f9fa..70322a9 100644 (file)
@@ -44,6 +44,8 @@ static Eina_Bool _on_item_back_btn_clicked(void *data,
 
 static Eina_Bool _key_action_top_item_get(Evas_Object *obj, const char *params);
 
+static char *_access_info_cb(void *data, Evas_Object *obj EINA_UNUSED);
+
 static const Elm_Action key_actions[] = {
    {"top_item_get", _key_action_top_item_get},
    {NULL, NULL}
@@ -331,6 +333,20 @@ _item_style_set(Elm_Naviframe_Item_Data *it,
 
    if (sd->freeze_events)
      evas_object_freeze_events_set(VIEW(it), EINA_FALSE);
+
+   //TIZEN ONLY(20150707): expose title as at-spi object
+   if (_elm_config->atspi_mode)
+     {
+         Evas_Object *part = (Evas_Object*)edje_object_part_object_get(elm_layout_edje_get(VIEW(it)), TITLE_ACCESS_PART);
+         if (part)
+           {
+              Evas_Object *access = elm_access_object_register(part, VIEW(it));
+              _elm_access_callback_set(_elm_access_info_get(access),
+                                       ELM_ACCESS_INFO, _access_info_cb, it);
+              elm_atspi_accessible_role_set(access, ELM_ATSPI_ROLE_HEADING);
+           }
+     }
+   //
 }
 
 static void
@@ -995,6 +1011,9 @@ _back_btn_new(Evas_Object *obj, const char *title_label)
         elm_layout_content_set(btn, CONTENT_PART, ico);
      }
 
+   if(_elm_config->atspi_mode)
+      eo_do(btn, elm_interface_atspi_accessible_name_set(N_("Navigate back")));
+
    return btn;
 }
 
@@ -1286,6 +1305,20 @@ _item_new(Evas_Object *obj,
 
    it->title_enabled = EINA_TRUE;
 
+   //TIZEN ONLY(20150707): expose title as at-spi object
+   if (_elm_config->atspi_mode)
+     {
+         Evas_Object *part = (Evas_Object*)edje_object_part_object_get(elm_layout_edje_get(VIEW(it)), TITLE_ACCESS_PART);
+         if (part)
+           {
+              Evas_Object *access = elm_access_object_register(part, VIEW(it));
+              _elm_access_callback_set(_elm_access_info_get(access),
+                                       ELM_ACCESS_INFO, _access_info_cb, it);
+              elm_atspi_accessible_role_set(access, ELM_ATSPI_ROLE_HEADING);
+           }
+     }
+   //
+
    return EO_OBJ(it);
 }
 
index 6e75868..dbec3c1 100644 (file)
@@ -55,8 +55,15 @@ static Eina_Bool
 _hide_effect_finished_cb(void *data, Eo *obj EINA_UNUSED,
             const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED);
 
+//TIZEN_ONLY(20150709) : add keybinding for elm_popup "block,clicked" action
+static Eina_Bool _key_action_escape(Evas_Object *obj, const char *params);
+///
+
 static const Elm_Action key_actions[] = {
    {"move", _key_action_move},
+//TIZEN_ONLY(20150709) : add keybinding for elm_popup "block,clicked" action
+   {"escape", _key_action_escape},
+///
    {NULL, NULL}
 };
 
@@ -1518,6 +1525,15 @@ _elm_popup_elm_widget_focus_direction(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd, c
    return EINA_TRUE;
 }
 
+//TIZEN_ONLY(20150709) : add keybinding for elm_popup "block,clicked" action
+static Eina_Bool
+_key_action_escape(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+   evas_object_smart_callback_call(obj, SIG_BLOCK_CLICKED, NULL);
+   return EINA_TRUE;
+}
+//
+
 static Eina_Bool
 _key_action_move(Evas_Object *obj, const char *params)
 {
@@ -1706,8 +1722,7 @@ _elm_popup_eo_base_constructor(Eo *obj, Elm_Popup_Data *_pd EINA_UNUSED)
    eo_do(obj,
          evas_obj_type_set(MY_CLASS_NAME_LEGACY),
          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
-         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_NOTIFICATION));
-
+         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_DIALOG));
    return obj;
 }
 
@@ -1957,14 +1972,14 @@ EOLIAN const Elm_Atspi_Action *
 _elm_popup_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Popup_Data *pd EINA_UNUSED)
 {
    static Elm_Atspi_Action atspi_actions[] = {
-          { "move,previous", "move", "previous", _key_action_move},
-          { "move,next", "move", "next", _key_action_move},
-          { "move,left", "move", "left", _key_action_move},
-          { "move,right", "move", "right", _key_action_move},
-          { "move,up", "move", "up", _key_action_move},
-          { "move,down", "move", "down", _key_action_move},
+//TIZEN_ONLY(20150709) : add keybinding for elm_popup "block,clicked" action
+          { "escape", "escape", NULL, _key_action_escape},
           { NULL, NULL, NULL, NULL }
    };
+   if (pd->action_area)
+     return NULL;
+///
+
    return &atspi_actions[0];
 }
 
index 2f20dc0..b33bec6 100644 (file)
@@ -2,6 +2,10 @@
 # include "elementary_config.h"
 #endif
 
+#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
+#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED
+#define ELM_INTERFACE_ATSPI_ACTION_PROTECTED
+
 #include <Elementary.h>
 #include "elm_priv.h"
 
@@ -73,6 +77,17 @@ _access_action_callback_call(Evas_Object *obj,
    return ret;
 }
 
+static Eina_Bool
+_access_action_callback_have(Evas_Object *obj, Elm_Access_Action_Type type)
+{
+   Action_Info *a;
+   a = evas_object_data_get(obj, "_elm_access_action_info");
+
+   if (!a) return EINA_FALSE;
+
+   return a->fn[type].cb ? EINA_TRUE : EINA_FALSE;
+}
+
 EOLIAN static Eina_Bool
 _elm_access_elm_widget_activate(Eo *obj, void *_pd EINA_UNUSED, Elm_Activate act)
 {
@@ -1451,4 +1466,62 @@ _elm_access_class_constructor(Eo_Class *klass)
    evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
 }
 
+EOLIAN static char*
+_elm_access_elm_interface_atspi_accessible_name_get(Eo *obj, void *pd EINA_UNUSED)
+{
+   return elm_access_info_get(obj, ELM_ACCESS_INFO);
+}
+
+EOLIAN static const char*
+_elm_access_elm_interface_atspi_accessible_description_get(Eo *obj, void *pd EINA_UNUSED)
+{
+   return elm_access_info_get(obj, ELM_ACCESS_CONTEXT_INFO);
+}
+
+EOLIAN static Eina_Bool
+_elm_access_elm_interface_atspi_component_highlight_grab(Eo *obj, void *pd EINA_UNUSED)
+{
+   if (!_access_action_callback_call(obj, ELM_ACCESS_ACTION_HIGHLIGHT, NULL))
+     eo_do_super(obj, ELM_ACCESS_CLASS, elm_interface_atspi_component_highlight_grab());
+
+   return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_elm_access_elm_interface_atspi_component_highlight_clear(Eo *obj, void *pd EINA_UNUSED)
+{
+   if (!_access_action_callback_call(obj, ELM_ACCESS_ACTION_UNHIGHLIGHT, NULL))
+     eo_do_super(obj, ELM_ACCESS_CLASS, elm_interface_atspi_component_highlight_clear());
+
+   return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_elm_access_elm_interface_atspi_action_action_do(Eo *obj, void *pd EINA_UNUSED, int id)
+{
+   if (id != 0)
+     return EINA_FALSE;
+
+   return _access_action_callback_call(obj, ELM_ACCESS_ACTION_ACTIVATE, NULL);
+}
+
+EOLIAN static const char *
+_elm_access_elm_interface_atspi_action_name_get(Eo *obj, void *pd EINA_UNUSED, int id)
+{
+   if ((id != 0) || !_access_action_callback_have(obj, ELM_ACCESS_ACTION_ACTIVATE))
+     return NULL;
+   return "activate";
+}
+
+EOLIAN static Eina_List*
+_elm_access_elm_interface_atspi_action_actions_get(Eo *obj, void *pd EINA_UNUSED)
+{
+   Eina_List *ret = NULL;
+
+   if (_access_action_callback_have(obj, ELM_ACCESS_ACTION_ACTIVATE))
+      ret = eina_list_append(ret, &("activate"));
+
+   return ret;
+}
+
 #include "elm_access.eo.c"
index 8844d65..1f820dd 100644 (file)
@@ -1,4 +1,4 @@
-class Elm.Access (Elm.Widget)
+class Elm.Access (Elm.Widget, Elm_Interface_Atspi_Action)
 {
 eo_prefix: elm_obj_access;
    data: null;
@@ -8,6 +8,12 @@ eo_prefix: elm_obj_access;
       Evas.Object_Smart.add;
       Elm.Widget.activate;
       Elm.Widget.on_focus;
+      Elm_Interface_Atspi_Accessible.name.get;
+      Elm_Interface_Atspi_Accessible.description.get;
+      Elm_Interface_Atspi_Component.highlight_grab;
+      Elm_Interface_Atspi_Component.highlight_clear;
+      Elm_Interface_Atspi_Action.action_do;
+      Elm_Interface_Atspi_Action.name.get;
+      Elm_Interface_Atspi_Action.actions.get;
    }
-
 }
index 1864da0..43fc195 100644 (file)
@@ -162,7 +162,7 @@ _elm_bg_eo_base_constructor(Eo *obj, Elm_Bg_Data *_pd EINA_UNUSED)
    obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor());
    eo_do(obj,
          evas_obj_type_set(MY_CLASS_NAME_LEGACY),
-         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_IMAGE));
+         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_REDUNDANT_OBJECT));
 
    return obj;
 }
index b918c49..996d5bc 100644 (file)
@@ -1,4 +1,4 @@
-class Elm.Color_Item(Elm.Widget_Item)
+class Elm.Color_Item(Elm.Widget_Item, Elm_Interface_Atspi_Widget_Action)
 {
    eo_prefix: elm_obj_color_item;
    methods {
@@ -39,5 +39,11 @@ class Elm.Color_Item(Elm.Widget_Item)
       Eo.Base.destructor;
       Elm.Widget_Item.access_register;
       Elm.Widget_Item.signal_emit;
+      //TIZEN_ONLY(20150707) : improve colorselctor atspi support
+      Elm_Interface_Atspi_Accessible.state_set.get;
+      Elm_Interface_Atspi_Component.highlight_grab;
+      Elm_Interface_Atspi_Component.highlight_clear;
+      Elm_Interface_Atspi_Widget_Action.elm_actions.get;
+      //
    }
 }
index b70544b..e6df91e 100644 (file)
@@ -3,6 +3,7 @@
 #endif
 
 #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
+#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED
 #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
 
 #include <Elementary.h>
@@ -1520,6 +1521,38 @@ _elm_color_item_elm_widget_item_signal_emit(Eo *eo_it EINA_UNUSED,
    elm_object_signal_emit(VIEW(it), emission, source);
 }
 
+// TIZEN ONLY : "elm,state,selected" signal is handled by _on_color_selected()
+static Eina_Bool
+_item_action_activate(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+   Eina_List *l;
+   ELM_COLOR_ITEM_DATA_GET(obj, item);
+   ELM_COLORSELECTOR_DATA_GET(WIDGET(item), sd);
+
+   elm_object_signal_emit(VIEW(item), "elm,state,selected", "elm");
+   elm_colorselector_color_set(WIDGET(item), item->color->r, item->color->g,
+                               item->color->b, item->color->a);
+   evas_object_smart_callback_call(WIDGET(item), SIG_COLOR_ITEM_SELECTED,
+                                   EO_OBJ(item));
+
+   Eo *eo_temp_item = eina_list_data_get(sd->selected);
+   if (eo_temp_item && (eo_temp_item != EO_OBJ(item)))
+     {
+        ELM_COLOR_ITEM_DATA_GET(eo_temp_item, temp_item);
+        elm_object_signal_emit(VIEW(temp_item), "elm,state,unselected", "elm");
+     }
+
+   EINA_LIST_FOREACH(sd->items, l, eo_temp_item)
+     {
+        ELM_COLOR_ITEM_DATA_GET(eo_temp_item, temp_item);
+        if (item == temp_item) sd->selected = l;
+     }
+   sd->focused = ELM_COLORSELECTOR_PALETTE;
+
+   return EINA_TRUE;
+}
+//
+
 EOLIAN static Eo *
 _elm_color_item_eo_base_constructor(Eo *eo_item, Elm_Color_Item_Data *item)
 {
@@ -1561,7 +1594,9 @@ _elm_color_item_eo_base_constructor(Eo *eo_item, Elm_Color_Item_Data *item)
    // ACCESS
    if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
      eo_do(eo_item, elm_wdg_item_access_register());
-
+   //TIZEN_ONLY(20150707) : improve colorselctor atspi support
+   eo_do(eo_item, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_RADIO_BUTTON));
+   ///
    return eo_item;
 }
 
@@ -2365,6 +2400,70 @@ _elm_colorselector_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EIN
    return &atspi_actions[0];
 }
 
+//TIZEN_ONLY(20150707) : improve colorselctor atspi support
+EOLIAN static Eina_List*
+_elm_colorselector_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, Elm_Colorselector_Data *sd EINA_UNUSED)
+{
+   Eina_List *ret = NULL;
+
+   eo_do_super(obj, ELM_COLORSELECTOR_CLASS, ret = elm_interface_atspi_accessible_children_get());
+
+   // filter - out box contiainer
+   ret = eina_list_remove(ret, sd->palette_box);
+
+   // append items as colorselector children
+   ret = eina_list_merge(ret, eina_list_clone(sd->items));
+
+   return ret;
+}
+
+EOLIAN static Elm_Atspi_State_Set
+_elm_color_item_elm_interface_atspi_accessible_state_set_get(Eo *obj EINA_UNUSED, Elm_Color_Item_Data *sd EINA_UNUSED)
+{
+   Elm_Atspi_State_Set ret;
+
+   eo_do_super(obj, ELM_COLOR_ITEM_CLASS, ret = elm_interface_atspi_accessible_state_set_get());
+
+   Evas_Object *widget = WIDGET(sd);
+   if (!widget) return ret;
+
+   ELM_COLORSELECTOR_DATA_GET_OR_RETURN_VAL(widget, wd, ret);
+
+   if (eina_list_data_get(wd->selected) == obj)
+     STATE_TYPE_SET(ret, ELM_ATSPI_STATE_CHECKED);
+
+   return ret;
+}
+
+EOLIAN static Eina_Bool
+_elm_color_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_Color_Item_Data *it)
+{
+   elm_genlist_item_show(eo_it, ELM_GENLIST_ITEM_SCROLLTO_IN);
+
+   elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+
+   return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_elm_color_item_elm_interface_atspi_component_highlight_clear(Eo *eo_it EINA_UNUSED, Elm_Color_Item_Data *it)
+{
+   elm_object_accessibility_highlight_set(VIEW(it), EINA_FALSE);
+
+   return EINA_TRUE;
+}
+
+EOLIAN static const Elm_Atspi_Action*
+_elm_color_item_elm_interface_atspi_widget_action_elm_actions_get(Eo *eo_it EINA_UNUSED, Elm_Color_Item_Data *it EINA_UNUSED)
+{
+   static Elm_Atspi_Action atspi_actions[] = {
+          { "activate", "activate", NULL, _item_action_activate},
+          { NULL, NULL, NULL, NULL }
+   };
+   return &atspi_actions[0];
+}
+/////
+
 #include "elm_colorselector.eo.c"
 #include "elm_color_item.eo.c"
 
index 2f90512..778f5bb 100644 (file)
@@ -116,6 +116,9 @@ selected.]]
       Elm.Widget.event;
       Elm.Layout.sizing_eval;
       Elm_Interface_Atspi_Widget_Action.elm_actions.get;
+      //TIZEN_ONLY(20150707) : improve colorselctor atspi support
+      Elm_Interface_Atspi_Accessible.children.get;
+      ///
    }
    events {
       color,item,selected;
index f42979f..3424f51 100644 (file)
@@ -1,4 +1,4 @@
-class Elm.Ctxpopup_Item(Elm.Widget_Item)
+class Elm.Ctxpopup_Item(Elm.Widget_Item, Elm_Interface_Atspi_Widget_Action)
 {
    eo_prefix: elm_obj_ctxpopup_item;
    methods {
@@ -48,5 +48,6 @@ class Elm.Ctxpopup_Item(Elm.Widget_Item)
         Elm.Widget_Item.part_content.set;
         Elm.Widget_Item.focus.set;
         Elm.Widget_Item.focus.get;
+        Elm_Interface_Atspi_Widget_Action.elm_actions.get;
    }
 }
index 3ff311c..e2ce932 100644 (file)
@@ -401,6 +401,14 @@ _item_show_region(void *data)
                   it_xpos = it_xpos - ((vw - sd->item_width) / 2);
                   it_ypos = it_ypos - ((vh - sd->item_height) / 2);
                   break;
+               // @tizen_feature
+               case ELM_GENGRID_ITEM_SCROLLTO_BOTTOM:
+                  eo_do(WIDGET(it), elm_interface_scrollable_content_viewport_geometry_get
+                        (NULL, NULL, &vw, &vh));
+                  it_xpos = it_xpos - vw + sd->item_width;
+                  it_ypos = it_ypos - vh + sd->item_height;
+                  break;
+               ///
                default:
                   vw = sd->item_width;
                   vh = sd->item_height;
@@ -5513,11 +5521,14 @@ _elm_gengrid_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_it, Elm_Ge
 }
 
 EOLIAN char*
-_elm_gengrid_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *it)
+_elm_gengrid_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Gen_Item *it)
 {
    char *ret;
    Eina_Strbuf *buf;
 
+   eo_do_super(eo_it, ELM_GENGRID_ITEM_CLASS, ret = elm_interface_atspi_accessible_name_get());
+   if (ret) return ret;
+
    buf = eina_strbuf_new();
 
    if (it->itc->func.text_get)
@@ -5567,7 +5578,10 @@ _elm_gengrid_item_elm_interface_atspi_accessible_children_get(Eo *eo_it EINA_UNU
              Evas_Object *part;
              part = edje_object_part_swallow_get(VIEW(it), key);
              if (part && eo_isa(part, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN))
-               ret = eina_list_append(ret, part);
+               {
+                  ret = eina_list_append(ret, part);
+                  eo_do(part, elm_interface_atspi_accessible_parent_set(eo_it));
+               }
           }
      }
    return ret;
@@ -5743,6 +5757,9 @@ _elm_gengrid_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Gengrid_D
 
    STATE_TYPE_SET(ret, ELM_ATSPI_STATE_MANAGES_DESCENDANTS);
 
+   if (elm_gengrid_multi_select_get(obj))
+     STATE_TYPE_SET(ret, ELM_ATSPI_STATE_MULTISELECTABLE);
+
    return ret;
 }
 
index a055e6f..b80f08f 100644 (file)
@@ -7,7 +7,10 @@ enum Elm.Gengrid.Item.Scrollto_Type
    none = 0,   [[No scrollto.]]
    in = (1 << 0),   [[To the nearest viewport.]]
    top = (1 << 1),   [[To the top of viewport.]]
-   middle = (1 << 2)   [[To the middle of viewport.]]
+   middle = (1 << 2),   [[To the middle of viewport.]]
+   // @tizen_feature
+   bottom = (1 << 3)   [[To the bottom of viewport.]]
+   //
 }
 
 enum Elm.Gengrid.Item.Field_Type
index 2fd82a8..6f1801c 100644 (file)
@@ -8019,11 +8019,14 @@ _elm_genlist_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_it, Elm_Ge
 }
 
 EOLIAN char*
-_elm_genlist_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED,
+_elm_genlist_item_elm_interface_atspi_accessible_name_get(Eo *eo_it,
                                                           Elm_Gen_Item *it)
 {
    char *ret;
    Eina_Strbuf *buf;
+   eo_do_super(eo_it, ELM_GENLIST_ITEM_CLASS, ret = elm_interface_atspi_accessible_name_get());
+   if (ret) return ret;
+   Elm_Genlist_Item_Type genlist_item_type = elm_genlist_item_type_get(eo_it);
 
    buf = eina_strbuf_new();
 
@@ -8034,6 +8037,7 @@ _elm_genlist_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED,
 
         texts =
            elm_widget_stringlist_get(edje_object_data_get(VIEW(it), "texts"));
+        int texts_list_item_index = 0;
 
         EINA_LIST_FREE(texts, key)
           {
@@ -8048,7 +8052,15 @@ _elm_genlist_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED,
                   if (eina_strbuf_length_get(buf) > 0) eina_strbuf_append(buf, ", ");
                   eina_strbuf_append(buf, str_utf8);
                   free(str_utf8);
+
+                  if((genlist_item_type & ELM_GENLIST_ITEM_TREE) && texts_list_item_index == 0)
+                    {
+                      eina_strbuf_append(buf, ", ");
+                      eina_strbuf_append(buf, E_("group index"));
+                    }
                }
+
+             ++texts_list_item_index;
           }
      }
 
@@ -8274,6 +8286,9 @@ _elm_genlist_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Genlist_D
 
    STATE_TYPE_SET(ret, ELM_ATSPI_STATE_MANAGES_DESCENDANTS);
 
+   if (elm_genlist_multi_select_get(obj))
+     STATE_TYPE_SET(ret, ELM_ATSPI_STATE_MULTISELECTABLE);
+
    return ret;
 }
 
index 2ca235a..73fcf3f 100644 (file)
@@ -3,6 +3,8 @@
 #endif
 
 #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
+#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
+#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED
 
 #include <Elementary.h>
 
@@ -685,7 +687,7 @@ _elm_hover_eo_base_constructor(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED)
    eo_do(obj,
          evas_obj_type_set(MY_CLASS_NAME_LEGACY),
          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
-         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_GLASS_PANE));
+         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_POPUP_MENU));
 
    return obj;
 }
@@ -836,4 +838,64 @@ _elm_hover_class_constructor(Eo_Class *klass)
    evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
 }
 
+
+EOLIAN static Elm_Atspi_State_Set
+_elm_hover_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Hover_Data *pd EINA_UNUSED)
+{
+   Elm_Atspi_State_Set states;
+
+   eo_do_super(obj, MY_CLASS, states = elm_interface_atspi_accessible_state_set_get());
+
+   STATE_TYPE_SET(states, ELM_ATSPI_STATE_MODAL);
+
+   return states;
+}
+
+static Eina_Bool
+_action_dismiss(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+   elm_hover_dismiss(obj);
+   return EINA_TRUE;
+}
+
+EOLIAN const Elm_Atspi_Action *
+_elm_hover_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *pd EINA_UNUSED)
+{
+   static Elm_Atspi_Action atspi_actions[] = {
+          { "dismiss", "dismiss", NULL, _action_dismiss },
+          { NULL, NULL, NULL, NULL}
+   };
+   return &atspi_actions[0];
+}
+
+EOLIAN static Eina_Bool
+_elm_hover_elm_interface_atspi_component_highlight_grab(Eo *obj, Elm_Hover_Data *sd)
+{
+   ELM_HOVER_PARTS_FOREACH
+   {
+      if (sd->subs[i].obj)
+     {
+        elm_object_accessibility_highlight_set(sd->subs[i].obj, EINA_TRUE);
+        elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_TRUE);
+        break;
+     }
+   }
+   return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_elm_hover_elm_interface_atspi_component_highlight_clear(Eo *obj, Elm_Hover_Data *sd)
+{
+   ELM_HOVER_PARTS_FOREACH
+   {
+      if (sd->subs[i].obj)
+     {
+        elm_object_accessibility_highlight_set(sd->subs[i].obj, EINA_FALSE);
+        elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_FALSE);
+        break;
+     }
+   }
+   return EINA_TRUE;
+}
+
 #include "elm_hover.eo.c"
index 03a84b5..54b1ea9 100644 (file)
@@ -7,7 +7,8 @@ enum Elm.Hover.Axis
    both [[ELM_HOVER_AXIS_BOTH -- both.]]
 }
 
-class Elm.Hover (Elm.Layout, Evas.Clickable_Interface)
+class Elm.Hover (Elm.Layout, Evas.Clickable_Interface,
+                 Elm_Interface_Atspi_Widget_Action)
 {
    eo_prefix: elm_obj_hover;
    methods {
@@ -75,6 +76,10 @@ class Elm.Hover (Elm.Layout, Evas.Clickable_Interface)
       Elm.Container.content_unset;
       Elm.Layout.sizing_eval;
       Elm.Layout.content_aliases.get;
+      Elm_Interface_Atspi_Accessible.state_set.get;
+      Elm_Interface_Atspi_Widget_Action.elm_actions.get;
+      Elm_Interface_Atspi_Component.highlight_grab;
+      Elm_Interface_Atspi_Component.highlight_clear;
    }
    events {
       smart,changed;
index 8e8877d..b634fd1 100644 (file)
@@ -672,7 +672,7 @@ _elm_icon_eo_base_constructor(Eo *obj, Elm_Icon_Data *sd)
    eo_do(obj,
          evas_obj_type_set(MY_CLASS_NAME_LEGACY),
          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
-         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_IMAGE));
+         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_ICON));
 
    return obj;
 }
index 458df79..8bfb9ae 100644 (file)
@@ -3,6 +3,7 @@
 #endif
 
 #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
+#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
 
 #define ELM_WIDGET_ITEM_PROTECTED
 #include <Elementary.h>
@@ -533,7 +534,9 @@ _elm_index_item_eo_base_constructor(Eo *obj, Elm_Index_Item_Data *it)
 {
    obj = eo_do_super_ret(obj, ELM_INDEX_ITEM_CLASS, obj, eo_constructor());
    it->base = eo_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS);
-
+   //TIZEN_ONLY(20150716) : improve atspi support
+   eo_do(obj, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_PUSH_BUTTON));
+   ///
    return obj;
 }
 
@@ -1236,7 +1239,7 @@ _elm_index_eo_base_constructor(Eo *obj, Elm_Index_Data *_pd EINA_UNUSED)
    eo_do(obj,
          evas_obj_type_set(MY_CLASS_NAME_LEGACY),
          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
-         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_LIST));
+         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_SCROLL_BAR));
 
    return obj;
 }
@@ -1652,5 +1655,36 @@ _elm_index_class_constructor(Eo_Class *klass)
    evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
 }
 
+//TIZEN_ONLY(20150716) : improve atspi support
+static Eina_Bool
+_item_action_activate(Eo *obj, const char *params EINA_UNUSED EINA_UNUSED)
+{
+   elm_index_item_selected_set(obj, EINA_TRUE);
+   return EINA_FALSE;
+}
+
+EOLIAN static Eina_List*
+_elm_index_elm_interface_atspi_accessible_children_get(Eo *eo_it EINA_UNUSED, Elm_Index_Data *data)
+{
+   return eina_list_clone(data->items);
+}
+
+EOLIAN static char*
+_elm_index_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED, Elm_Index_Item_Data *data)
+{
+   return data->letter ? strdup(data->letter) : NULL;
+}
+
+EOLIAN static const Elm_Atspi_Action*
+_elm_index_item_elm_interface_atspi_widget_action_elm_actions_get(Eo *eo_it EINA_UNUSED, Elm_Index_Item_Data *data EINA_UNUSED)
+{
+   static Elm_Atspi_Action atspi_actions[] = {
+          { "activate", "activate", NULL, _item_action_activate},
+          { NULL, NULL, NULL, NULL }
+   };
+   return &atspi_actions[0];
+}
+///
+
 #include "elm_index_item.eo.c"
 #include "elm_index.eo.c"
index e51f779..caed85d 100644 (file)
@@ -243,6 +243,9 @@ class Elm.Index (Elm.Layout, Evas.Clickable_Interface, Evas.Selectable_Interface
       Elm.Widget.access;
       Elm.Widget.focus_next;
       Elm.Layout.sizing_eval;
+      //TIZEN_ONLY(20150716) : improve atspi support
+      Elm_Interface_Atspi_Accessible.children.get;
+      ///
    }
    events {
       changed;
index 36d490a..7380e85 100644 (file)
@@ -1,4 +1,4 @@
-class Elm.Index_Item(Elm.Widget_Item)
+class Elm.Index_Item(Elm.Widget_Item, Elm_Interface_Atspi_Widget_Action)
 {
    eo_prefix: elm_obj_index_item;
    methods {
@@ -42,5 +42,9 @@ class Elm.Index_Item(Elm.Widget_Item)
         Eo.Base.constructor;
         Eo.Base.destructor;
         Elm.Widget_Item.access_register;
+        //TIZEN_ONLY(20150716) : improve atspi support
+        Elm_Interface_Atspi_Accessible.name.get;
+        Elm_Interface_Atspi_Widget_Action.elm_actions.get;
+        ///
    }
 }
index 027138b..993d447 100644 (file)
@@ -195,4 +195,10 @@ mixin Elm_Interface_Atspi_Accessible ()
       added;
       removed;
    }
+   //TIZEN_ONLY(20150709) : atspi relations api
+   implements {
+      @virtual .relationship_append;
+      @virtual .relationship_remove;
+   }
+   //////////
 }
index 9dca66e..3dc38e3 100644 (file)
@@ -14,17 +14,17 @@ typedef uint64_t Elm_Atspi_State_Set;
 /*
  * Sets a particilar state type for given state set.
  */
-#define STATE_TYPE_SET(state_set, type)   (state_set|= (1L << type))
+#define STATE_TYPE_SET(state_set, type)   (state_set|= (1ULL << type))
 
 /**
  * Unsets a particilar state type for given state set.
  */
-#define STATE_TYPE_UNSET(state_set, type) (state_set &= ~(1L << type))
+#define STATE_TYPE_UNSET(state_set, type) (state_set &= ~(1ULL << type))
 
 /**
  * Gets value of a particilar state type for given state set.
  */
-#define STATE_TYPE_GET(state_set, type)   (state_set & (1L << type))
+#define STATE_TYPE_GET(state_set, type)   (state_set & (1ULL << type))
 
 
 /**
index 9a216e7..c1a460d 100644 (file)
@@ -74,11 +74,17 @@ _elm_interface_atspi_component_accessible_at_point_get(Eo *obj, void *_pd EINA_U
 
    eo_do(obj, children = elm_interface_atspi_accessible_children_get());
 
-   EINA_LIST_FOREACH(children, l, child)
+   EINA_LIST_REVERSE_FOREACH(children, l, child)
      {
         Eina_Bool contains;
         if (eo_isa(child, ELM_INTERFACE_ATSPI_COMPONENT_MIXIN))
           {
+              //TIZEN_ONLY (20150709) imporove object at xy get function
+              Elm_Atspi_Role role;
+              eo_do(child, role = elm_interface_atspi_accessible_role_get());
+              if (role == ELM_ATSPI_ROLE_REDUNDANT_OBJECT)
+                continue;
+              //
               eo_do(child, contains = elm_interface_atspi_component_contains(screen_coords, x, y));
               if (contains)
                 {
index 3e9898c..6bbc967 100644 (file)
@@ -2329,6 +2329,12 @@ _item_new(Evas_Object *obj,
 
    VIEW(it) = edje_object_add(evas_object_evas_get(obj));
 
+   if (_elm_config->atspi_mode)
+     {
+        if (it->icon) eo_do(it->icon, elm_interface_atspi_accessible_parent_set(eo_it));
+        if (it->end) eo_do(it->end, elm_interface_atspi_accessible_parent_set(eo_it));
+     }
+
    /* access */
    if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
      _access_widget_item_register(it, EINA_TRUE);
index 18630cb..f501844 100644 (file)
@@ -3,6 +3,7 @@
 #endif
 
 #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
+#define ELM_INTERFACE_ATSPI_VALUE_PROTECTED
 
 #include <Elementary.h>
 
@@ -563,6 +564,17 @@ _elm_progressbar_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_
    return EINA_FALSE;
 }
 
+/////////////////////////////////////////////////////////
+//TIZENONLY (20150825) Add atspi value interface to progressbar
+
+EOLIAN static void
+_elm_progressbar_elm_interface_atspi_value_value_and_text_get(Eo *obj, Elm_Progressbar_Data *_pd, double *value, const char **text)
+{
+   if (value) *value = _pd->val;
+}
+
+//
+
 EOLIAN static void
 _elm_progressbar_class_constructor(Eo_Class *klass)
 {
index 827581c..f67bae5 100644 (file)
@@ -1,4 +1,4 @@
-class Elm.Progressbar (Elm.Layout)
+class Elm.Progressbar (Elm.Layout, Elm_Interface_Atspi_Value)
 {
    eo_prefix: elm_obj_progressbar;
    methods {
@@ -166,6 +166,7 @@ class Elm.Progressbar (Elm.Layout)
       Elm.Layout.text_aliases.get;
       Elm.Layout.content_aliases.get;
       Elm.Layout.sizing_eval;
+      Elm_Interface_Atspi_Value.value_and_text.get;
    }
    events {
       changed;
index ac5918c..1e15849 100644 (file)
@@ -1353,7 +1353,7 @@ _elm_spinner_eo_base_constructor(Eo *obj, Elm_Spinner_Data *_pd EINA_UNUSED)
    eo_do(obj,
          evas_obj_type_set(MY_CLASS_NAME_LEGACY),
          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
-         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_SPIN_BUTTON));
+         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_FILLER));
 
    return obj;
 }
@@ -1570,20 +1570,6 @@ _elm_spinner_class_constructor(Eo_Class *klass)
       _elm_spinner_smart_focus_next_enable = EINA_TRUE;
 }
 
-EOLIAN static const Elm_Atspi_Action *
-_elm_spinner_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Spinner_Data *sd EINA_UNUSED)
-{
-   static Elm_Atspi_Action atspi_actions[] = {
-      { "spin,left", "spin", "left", _key_action_spin},
-      { "spin,right", "spin", "right", _key_action_spin},
-      { "spin,up", "spin", "up", _key_action_spin},
-      { "spin,down", "spin", "down", _key_action_spin},
-      { "toggle", "toggle", NULL, _key_action_toggle},
-      { NULL, NULL, NULL, NULL }
-   };
-   return &atspi_actions[0];
-}
-
 // A11Y Accessibility
 
 EOLIAN static void
index cd8b400..1b20461 100644 (file)
@@ -237,7 +237,6 @@ class Elm.Spinner (Elm.Layout, Elm_Interface_Atspi_Value, Elm_Interface_Atspi_Wi
       Elm_Interface_Atspi_Value.value_and_text.set;
       Elm_Interface_Atspi_Value.range.get;
       Elm_Interface_Atspi_Value.increment.get;
-      Elm_Interface_Atspi_Widget_Action.elm_actions.get;
    }
    events {
       changed;
index 625f966..19e8191 100644 (file)
@@ -3,6 +3,7 @@
 #endif
 
 #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
+#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED
 #define ELM_INTERFACE_ATSPI_SELECTION_PROTECTED
 #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
 #define ELM_WIDGET_ITEM_PROTECTED
@@ -150,18 +151,42 @@ _item_menu_destroy(Elm_Toolbar_Item_Data *item)
 static void
 _item_unselect(Elm_Toolbar_Item_Data *item)
 {
+   /* TIZEN_ONLY(20160418): Add auto selected item feature for navigation style.
    if ((!item) || (!item->selected)) return;
+   */
+   Eina_Bool selected;
+
+   if (!item) return;
+
+   selected = item->selected;
+   /* END */
 
    ELM_TOOLBAR_DATA_GET(WIDGET(item), sd);
 
    item->selected = EINA_FALSE;
+   /* TIZEN_ONLY(20160418): Add auto selected item feature for navigation style.
    sd->selected_item = NULL;
+   */
+   if (sd->selected_item == EO_OBJ(item))
+     sd->selected_item = NULL;
+   if (sd->auto_selected_last_item == EO_OBJ(item))
+     sd->auto_selected_last_item = NULL;
+   /* END */
    elm_layout_signal_emit(VIEW(item), "elm,state,unselected", "elm");
    if (item->icon)
      elm_widget_signal_emit(item->icon, "elm,state,unselected", "elm");
+   /* TIZEN_ONLY(20160418): Add auto selected item feature for navigation style.
    eo_do(WIDGET(item), eo_event_callback_call(EVAS_SELECTABLE_INTERFACE_EVENT_UNSELECTED, EO_OBJ(item)));
    if (_elm_config->atspi_mode)
     elm_interface_atspi_accessible_state_changed_signal_emit(EO_OBJ(item), ELM_ATSPI_STATE_SELECTED, EINA_FALSE);
+   */
+   if (selected)
+     {
+        eo_do(WIDGET(item), eo_event_callback_call(EVAS_SELECTABLE_INTERFACE_EVENT_UNSELECTED, EO_OBJ(item)));
+        if (_elm_config->atspi_mode)
+          elm_interface_atspi_accessible_state_changed_signal_emit(EO_OBJ(item), ELM_ATSPI_STATE_SELECTED, EINA_FALSE);
+     }
+   /* END */
 }
 
 static void
@@ -1105,6 +1130,13 @@ _item_select(Elm_Toolbar_Item_Data *it)
              Elm_Object_Item *eo_it2 = elm_toolbar_selected_item_get(WIDGET(it));
              ELM_TOOLBAR_ITEM_DATA_GET(eo_it2, it2);
              _item_unselect(it2);
+             /* TIZEN_ONLY(20160418): Add auto selected item feature for navigation style. */
+             if (sd->auto_selected_last_item)
+               {
+                  ELM_TOOLBAR_ITEM_DATA_GET(sd->auto_selected_last_item, it3);
+                  _item_unselect(it3);
+               }
+             /* END */
 
              it->selected = EINA_TRUE;
              sd->selected_item = EO_OBJ(it);
@@ -1174,6 +1206,111 @@ _item_select(Elm_Toolbar_Item_Data *it)
     elm_interface_atspi_accessible_state_changed_signal_emit(EO_OBJ(it), ELM_ATSPI_STATE_SELECTED, EINA_TRUE);
 }
 
+/* Send order signals when item is added/deleted.
+ * If the given item is on deletion, item_on_deletion should be EINA_TRUE. */
+static void
+_elm_toolbar_item_order_signal_emit(Elm_Toolbar_Data *sd,
+                                    Elm_Toolbar_Item_Data *it,
+                                    Eina_List *prev_list,
+                                    Eina_Bool item_on_deletion)
+{
+   Elm_Toolbar_Item_Data *first_it = NULL, *last_it = NULL;
+   Evas_Object *first_it_view = NULL, *last_it_view = NULL;
+   Elm_Toolbar_Item_Data *prev_first_it = NULL, *prev_last_it = NULL;
+   Evas_Object *prev_first_it_view = NULL, *prev_last_it_view = NULL;
+   Eina_List *list;
+
+   list = evas_object_box_children_get(sd->bx);
+
+   if (!list) return;
+
+   if (prev_list)
+     {
+        prev_first_it_view = eina_list_data_get(prev_list);
+        prev_last_it_view = eina_list_data_get(eina_list_last(prev_list));
+        prev_first_it = evas_object_data_get(prev_first_it_view, "item");
+        prev_last_it = evas_object_data_get(prev_last_it_view, "item");
+     }
+
+   first_it_view = eina_list_data_get(list);
+   last_it_view = eina_list_data_get(eina_list_last(list));
+   first_it = evas_object_data_get(first_it_view, "item");
+   last_it = evas_object_data_get(last_it_view, "item");
+
+   if (prev_first_it)
+     {
+        if ((prev_first_it != first_it) && (prev_first_it != last_it))
+          elm_layout_signal_emit(VIEW(prev_first_it), "elm,order,default,item", "elm");
+        else if (prev_first_it == last_it)
+          elm_layout_signal_emit(VIEW(prev_first_it), "elm,order,last,item", "elm");
+     }
+
+   if (prev_last_it)
+     {
+        if ((prev_last_it != last_it) && (prev_last_it != first_it))
+          elm_layout_signal_emit(VIEW(prev_last_it), "elm,order,default,item", "elm");
+        else if (prev_last_it == first_it)
+          elm_layout_signal_emit(VIEW(prev_last_it), "elm,order,first,item", "elm");
+     }
+
+   if (it)
+     {
+        if (!item_on_deletion)
+          {
+             if (first_it == last_it)
+               {
+                  elm_layout_signal_emit(VIEW(it), "elm,order,first,item", "elm");
+                  elm_layout_signal_emit(VIEW(it), "elm,order,last,item", "elm");
+               }
+             else if (it == first_it)
+               {
+                  elm_layout_signal_emit(VIEW(it), "elm,order,first,item", "elm");
+               }
+             else if (it == last_it)
+               {
+                  elm_layout_signal_emit(VIEW(it), "elm,order,last,item", "elm");
+               }
+          }
+        else if (first_it != last_it)
+          {
+             if (it == first_it)
+               {
+                  Eina_List *next_l = eina_list_next(list);
+                  first_it_view = eina_list_data_get(next_l);
+                  first_it = evas_object_data_get(first_it_view, "item");
+
+                  elm_layout_signal_emit(first_it_view, "elm,order,first,item", "elm");
+               }
+             else if (it == last_it)
+               {
+                  Eina_List *prev_l = eina_list_prev(eina_list_last(list));
+                  last_it_view = eina_list_data_get(prev_l);
+                  last_it = evas_object_data_get(last_it_view, "item");
+
+                  elm_layout_signal_emit(last_it_view, "elm,order,last,item", "elm");
+               }
+          }
+     }
+
+   /* TIZEN_ONLY(20160418): Add auto selected item feature for navigation style. */
+   if ((sd->selected_item != EO_OBJ(last_it)) &&
+       (sd->auto_selected_last_item != EO_OBJ(last_it)))
+     {
+        if (sd->auto_selected_last_item &&
+            sd->auto_selected_last_item != sd->selected_item)
+          {
+             ELM_TOOLBAR_ITEM_DATA_GET(sd->auto_selected_last_item, it2);
+
+             _item_unselect(it2);
+          }
+
+        sd->auto_selected_last_item = EO_OBJ(last_it);
+     }
+   /* END */
+
+   eina_list_free(list);
+}
+
 static void
 _item_del(Elm_Toolbar_Item_Data *it)
 {
@@ -1182,6 +1319,8 @@ _item_del(Elm_Toolbar_Item_Data *it)
 
    _item_unselect(it);
 
+   _elm_toolbar_item_order_signal_emit(sd, it, NULL, EINA_TRUE);
+
    EINA_LIST_FREE(it->states, it_state)
      {
         if (it->icon == it_state->icon)
@@ -2395,6 +2534,9 @@ _item_new(Evas_Object *obj,
    VIEW(it) = elm_layout_add(obj);
    evas_object_data_set(VIEW(it), "item", it);
 
+   if (_elm_config->atspi_mode)
+     if (icon_obj) eo_do(icon_obj, elm_interface_atspi_accessible_parent_set(eo_it));
+
    if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
      _access_widget_item_register(it);
 
@@ -3028,11 +3170,14 @@ _elm_toolbar_item_append(Eo *obj, Elm_Toolbar_Data *sd, const char *icon, const
 {
    Elm_Toolbar_Item_Data *it;
    double scale;
+   Eina_List *prev_list;
 
    it = _item_new(obj, icon, label, func, data);
    if (!it) return NULL;
    scale = (elm_widget_scale_get(obj) * elm_config_scale_get());
 
+   prev_list = evas_object_box_children_get(sd->bx);
+
    sd->items = eina_inlist_append(sd->items, EINA_INLIST_GET(it));
    evas_object_box_append(sd->bx, VIEW(it));
    evas_object_show(VIEW(it));
@@ -3040,6 +3185,9 @@ _elm_toolbar_item_append(Eo *obj, Elm_Toolbar_Data *sd, const char *icon, const
    _item_theme_hook(obj, it, scale, sd->icon_size);
    sd->item_count++;
 
+   _elm_toolbar_item_order_signal_emit(sd, it, prev_list, EINA_FALSE);
+   eina_list_free(prev_list);
+
    return EO_OBJ(it);
 }
 
@@ -3048,17 +3196,23 @@ _elm_toolbar_item_prepend(Eo *obj, Elm_Toolbar_Data *sd, const char *icon, const
 {
    Elm_Toolbar_Item_Data *it;
    double scale;
+   Eina_List *prev_list;
 
    it = _item_new(obj, icon, label, func, data);
    if (!it) return NULL;
    scale = (elm_widget_scale_get(obj) * elm_config_scale_get());
 
+   prev_list = evas_object_box_children_get(sd->bx);
+
    sd->items = eina_inlist_prepend(sd->items, EINA_INLIST_GET(it));
    evas_object_box_prepend(sd->bx, VIEW(it));
    evas_object_show(VIEW(it));
    _item_theme_hook(obj, it, scale, sd->icon_size);
    sd->item_count++;
 
+   _elm_toolbar_item_order_signal_emit(sd, it, prev_list, EINA_FALSE);
+   eina_list_free(prev_list);
+
    return EO_OBJ(it);
 }
 
@@ -3067,6 +3221,7 @@ _elm_toolbar_item_insert_before(Eo *obj, Elm_Toolbar_Data *sd, Elm_Object_Item *
 {
    Elm_Toolbar_Item_Data *it;
    double scale;
+   Eina_List *prev_list;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(eo_before, NULL);
    ELM_TOOLBAR_ITEM_DATA_GET(eo_before, _before);
@@ -3076,12 +3231,17 @@ _elm_toolbar_item_insert_before(Eo *obj, Elm_Toolbar_Data *sd, Elm_Object_Item *
    if (!it) return NULL;
    scale = (elm_widget_scale_get(obj) * elm_config_scale_get());
 
+   prev_list = evas_object_box_children_get(sd->bx);
+
    sd->items = eina_inlist_prepend_relative
        (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(_before));
    evas_object_box_insert_before(sd->bx, VIEW(it), VIEW(_before));
    _item_theme_hook(obj, it, scale, sd->icon_size);
    sd->item_count++;
 
+   _elm_toolbar_item_order_signal_emit(sd, it, prev_list, EINA_FALSE);
+   eina_list_free(prev_list);
+
    return EO_OBJ(it);
 }
 
@@ -3090,6 +3250,7 @@ _elm_toolbar_item_insert_after(Eo *obj, Elm_Toolbar_Data *sd, Elm_Object_Item *e
 {
    Elm_Toolbar_Item_Data *it;
    double scale;
+   Eina_List *prev_list;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(eo_after, NULL);
    ELM_TOOLBAR_ITEM_DATA_GET(eo_after, _after);
@@ -3099,12 +3260,17 @@ _elm_toolbar_item_insert_after(Eo *obj, Elm_Toolbar_Data *sd, Elm_Object_Item *e
    if (!it) return NULL;
    scale = (elm_widget_scale_get(obj) * elm_config_scale_get());
 
+   prev_list = evas_object_box_children_get(sd->bx);
+
    sd->items = eina_inlist_append_relative
        (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(_after));
    evas_object_box_insert_after(sd->bx, VIEW(it), VIEW(_after));
    _item_theme_hook(obj, it, scale, sd->icon_size);
    sd->item_count++;
 
+   _elm_toolbar_item_order_signal_emit(sd, it, prev_list, EINA_FALSE);
+   eina_list_free(prev_list);
+
    return EO_OBJ(it);
 }
 
@@ -3825,8 +3991,11 @@ _elm_toolbar_item_bring_in(Eo *eo_item EINA_UNUSED, Elm_Toolbar_Item_Data *item,
 }
 
 EOLIAN static char*
-_elm_toolbar_item_elm_interface_atspi_accessible_name_get(Eo *eo_item EINA_UNUSED, Elm_Toolbar_Item_Data *item)
+_elm_toolbar_item_elm_interface_atspi_accessible_name_get(Eo *eo_item, Elm_Toolbar_Item_Data *item)
 {
+   char *ret;
+   eo_do_super(eo_item, ELM_TOOLBAR_ITEM_CLASS, ret = elm_interface_atspi_accessible_name_get());
+   if (ret) return ret;
    return item->label ? strdup(item->label) : NULL;
 }
 
@@ -3898,6 +4067,24 @@ _elm_toolbar_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Toolbar_D
    return ret;
 }
 
+// TIZEN_ONLY(20150701): Add accessibility highlight for toolbar items
+
+EOLIAN static Eina_Bool
+_elm_toolbar_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_Toolbar_Item_Data *it)
+{
+   elm_toolbar_item_show(eo_it, ELM_TOOLBAR_ITEM_SCROLLTO_IN);
+   elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+   return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_elm_toolbar_item_elm_interface_atspi_component_highlight_clear(Eo *eo_it, Elm_Toolbar_Item_Data *it)
+{
+   elm_object_accessibility_highlight_set(VIEW(it), EINA_FALSE);
+   return EINA_TRUE;
+}
+//
+
 EOLIAN int
 _elm_toolbar_elm_interface_atspi_selection_selected_children_count_get(Eo *obj EINA_UNUSED, Elm_Toolbar_Data *pd)
 {
index e88ebc5..d15428d 100644 (file)
@@ -305,5 +305,7 @@ class Elm.Toolbar_Item(Elm.Widget_Item)
            Elm.Widget_Item.part_content_unset;
            Elm_Interface_Atspi_Accessible.name.get;
            Elm_Interface_Atspi_Accessible.state_set.get;
+           Elm_Interface_Atspi_Component.highlight_grab;
+           Elm_Interface_Atspi_Component.highlight_clear;
       }
 }
index c010dd0..08060e9 100644 (file)
@@ -4483,11 +4483,17 @@ _elm_widget_item_eo_base_destructor(Eo *eo_item, Elm_Widget_Item_Data *item)
          elm_interface_atspi_accessible_relationships_clear()
          );
 
+   if (item->name)
+     eina_stringshare_del(item->name);
+
    if (_elm_config->atspi_mode && item->widget)
      elm_interface_atspi_accessible_children_changed_del_signal_emit(item->widget, eo_item);
 
    elm_interface_atspi_accessible_removed(eo_item);
 
+   if (item->atspi_custom_relations)
+     elm_atspi_relation_set_free(&item->atspi_custom_relations);
+
    EINA_MAGIC_SET(item, EINA_MAGIC_NONE);
 
    eo_do_super(eo_item, ELM_WIDGET_ITEM_CLASS, eo_destructor());
@@ -5770,6 +5776,10 @@ _elm_widget_eo_base_destructor(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED)
          elm_interface_atspi_accessible_translation_domain_set(NULL),
          elm_interface_atspi_accessible_relationships_clear()
          );
+   // TIZEN_ONLY(20150709) : atspi relations api
+   if (sd->atspi_custom_relations)
+     elm_atspi_relation_set_free(&sd->atspi_custom_relations);
+   //
    eo_do_super(obj, ELM_WIDGET_CLASS, eo_destructor());
    sd->on_destroy = EINA_FALSE;
 
@@ -5895,6 +5905,26 @@ _elm_widget_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Wid
    return _elm_util_mkup_to_text(ret);
 }
 
+//TIZEN_ONLY(20150713) : add atspi name setter to widget_item
+EOLIAN void
+_elm_widget_item_elm_interface_atspi_accessible_name_set(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data* _pd EINA_UNUSED, char *name)
+{
+   if (_pd->name)
+     eina_stringshare_del(_pd->name);
+
+   _pd->name = eina_stringshare_add(name);
+}
+
+EOLIAN char*
+_elm_widget_item_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *_pd EINA_UNUSED)
+{
+   if (_pd->name)
+     return strdup(_pd->name);
+
+   return NULL;
+}
+///
+
 //TIZEN_ONLY(20160329): widget: sort accessible children spatially (d940068e1f7cc5cfc6208245a1fb0e92f1a813d4)
 static int _sort_vertically(const void *data1, const void *data2)
 {
@@ -6035,6 +6065,14 @@ _elm_widget_elm_interface_atspi_accessible_attributes_get(Eo *obj, Elm_Widget_Sm
    return ret;
 }
 
+// TIZEN_ONLY(20150709) : atspi relations api
+EOLIAN static Elm_Atspi_Relation_Set
+_elm_widget_elm_interface_atspi_accessible_relation_set_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
+{
+   return elm_atspi_relation_set_clone(&sd->atspi_custom_relations);
+}
+//////////////////////////////
+
 EOLIAN static void
 _elm_widget_item_elm_interface_atspi_component_extents_get(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *sd EINA_UNUSED, Eina_Bool screen_coords, int *x, int *y, int *w, int *h)
 {
@@ -6159,5 +6197,31 @@ _elm_widget_elm_interface_atspi_component_accessible_at_point_get(Eo *obj, Elm_W
 }
 //
 
+//TIZEN_ONLY(20150709) add relations atpi
+EOLIAN static Eina_Bool
+_elm_widget_elm_interface_atspi_accessible_relationship_append(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, Elm_Atspi_Relation_Type type, const Eo *relation_obj)
+{
+   return elm_atspi_relation_set_relation_append(&sd->atspi_custom_relations, type, relation_obj);
+}
+
+EOLIAN static void
+_elm_widget_elm_interface_atspi_accessible_relationship_remove(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, Elm_Atspi_Relation_Type type, const Eo *relation_obj)
+{
+   elm_atspi_relation_set_relation_remove(&sd->atspi_custom_relations, type, relation_obj);
+}
+
+EOLIAN static Eina_Bool
+_elm_widget_item_elm_interface_atspi_accessible_relationship_append(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *sd, Elm_Atspi_Relation_Type type, const Eo *relation_obj)
+{
+   return elm_atspi_relation_set_relation_append(&sd->atspi_custom_relations, type, relation_obj);
+}
+
+EOLIAN static void
+_elm_widget_item_elm_interface_atspi_accessible_relationship_remove(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *sd, Elm_Atspi_Relation_Type type, const Eo *relation_obj)
+{
+   elm_atspi_relation_set_relation_remove(&sd->atspi_custom_relations, type, relation_obj);
+}
+///////////////////////////////////
+
 #include "elm_widget_item.eo.c"
 #include "elm_widget.eo.c"
index 88fdbc6..8a7b404 100644 (file)
@@ -771,6 +771,10 @@ abstract Elm.Widget (Evas.Object_Smart, Elm_Interface_Atspi_Accessible, Elm_Inte
       Elm_Interface_Atspi_Accessible.children.get;
       Elm_Interface_Atspi_Accessible.parent.get;
       Elm_Interface_Atspi_Accessible.attributes.get;
+      //TIZEN_ONLY(20150709) : atspi relations api
+      Elm_Interface_Atspi_Accessible.relationship_append;
+      Elm_Interface_Atspi_Accessible.relationship_remove;
+      //
       Elm_Interface_Atspi_Component.focus_grab;
       //TIZEN_ONLY(20160329): atspi: implement HighlightGrab and HighlightClear methods (29e253e2f7ef3c632ac3a64c489bf569df407f30)
       Elm_Interface_Atspi_Component.highlight_grab;
index b0fd06e..d74cae6 100644 (file)
@@ -414,6 +414,9 @@ typedef struct _Elm_Widget_Smart_Data
    int                          role;         /**< Accessibility role */
    const char                   *description; /**< Accessibility description */
    Eo                           *atspi_custom_parent; /**< Accessibility parent if different then parent_obj */
+   //TIZEN_ONLY(20150709) add relations atpi
+   Elm_Atspi_Relation_Set       atspi_custom_relations; /**< Developer-defined accessiblity relations */
+   ///////////////////////////////////
 
    /* this is a hook to be set on-the-fly on widgets. this is code
     * handling the request of showing a specific region from an inner
@@ -633,6 +636,10 @@ struct _Elm_Widget_Item_Data
    /**< A11Y info */
    const char                    *description;
    int                            role;
+   //TIZEN_ONLY(20150709) add relations atpi
+   Elm_Atspi_Relation_Set        atspi_custom_relations; /**< Developer-defined accessiblity relations */
+   ///////////////////////////////////
+   const char                    *name;
 
    Eina_Bool                      disabled : 1;
    Eina_Bool                      on_deletion : 1;
index 9953bc8..2a13c6c 100644 (file)
@@ -529,8 +529,16 @@ class Elm.Widget_Item(Eo.Base, Elm_Interface_Atspi_Accessible,
       implements {
            Eo.Base.constructor;
            Eo.Base.destructor;
+           //TIZEN_ONLY(20150713) : add widget_item name setter
+           Elm_Interface_Atspi_Accessible.name.get;
+           Elm_Interface_Atspi_Accessible.name.set;
+           ///
            Elm_Interface_Atspi_Accessible.state_set.get;
            Elm_Interface_Atspi_Accessible.parent.get;
+           //TIZEN_ONLY(20150709) : atspi relations api
+           Elm_Interface_Atspi_Accessible.relationship_append;
+           Elm_Interface_Atspi_Accessible.relationship_remove;
+           //
            Elm_Interface_Atspi_Component.extents.get;
            Elm_Interface_Atspi_Component.extents.set;
            Elm_Interface_Atspi_Component.alpha.get;
index e9438fb..35dfc0e 100644 (file)
@@ -35,6 +35,9 @@ struct _Elm_Toolbar_Data
    Eina_Inlist                          *items;
    Elm_Toolbar_Item_Data                *more_item;
    Elm_Object_Item                      *selected_item; /**< a selected item by mouse click, return key, api, and etc. */
+   /* TIZEN_ONLY(20160418): Add auto selected item feature for navigation style. */
+   Elm_Object_Item                      *auto_selected_last_item; /**< a automatically selected item by its order. */
+   /* END */
    Elm_Object_Item                      *focused_item; /**< a focused item by keypad arrow or mouse. This is set to NULL if widget looses focus. */
    Elm_Object_Item                      *last_focused_item; /**< This records the last focused item when widget looses focus. This is required to set the focus on last focused item when widgets gets focus. */
    Elm_Toolbar_Item_Data                *reorder_empty, *reorder_item;
index 272527a..be9e634 100644 (file)
@@ -1349,7 +1349,9 @@ _elm_win_state_change(Ecore_Evas *ee)
    Eina_Bool ch_aux_hint = EINA_FALSE;
    Eina_List *aux_hints = NULL;
    const char *profile;
+#ifdef HAVE_ELEMENTARY_WAYLAND
    Conformant_Property property = CONFORMANT_DEFAULT; //TIZEN_ONLY(20160330): add processing properties of window
+#endif
 
    if (!sd) return;
 
index 23fbdbf..972dffd 100644 (file)
@@ -9,7 +9,7 @@
 #include "elm_priv.h"
 #include "elm_suite.h"
 
-static Evas_Object *g_win, *g_btn, *g_bg;
+static Evas_Object *g_win, *g_btn, *g_bg, *g_btn2, *g_btn3, *g_box, *g_lbl;
 
 void generate_app(void)
 {
@@ -25,6 +25,34 @@ void generate_app(void)
    evas_object_show(g_win);
 }
 
+void generate_app2(void)
+{
+   g_win = elm_win_add(NULL, "Title", ELM_WIN_BASIC);
+   evas_object_geometry_set(g_win, 100, 100, 100, 100);
+
+   g_bg = elm_bg_add(g_win);
+
+   g_box = elm_box_add(g_win);
+
+   g_btn = elm_button_add(g_win);
+   g_btn2 = elm_button_add(g_win);
+   g_btn3 = elm_button_add(g_win);
+   g_lbl = elm_label_add(g_win);
+
+   elm_box_pack_end(g_box, g_btn);
+   elm_box_pack_end(g_box, g_btn2);
+   elm_box_pack_end(g_box, g_btn3);
+   elm_box_pack_end(g_box, g_lbl);
+
+   evas_object_show(g_btn);
+   evas_object_show(g_bg);
+   evas_object_show(g_win);
+   evas_object_show(g_box);
+   evas_object_show(g_btn2);
+   evas_object_show(g_btn3);
+   evas_object_show(g_lbl);
+}
+
 START_TEST (elm_atspi_app_obj_name_get)
 {
    elm_init(0, NULL);
@@ -284,6 +312,7 @@ START_TEST (elm_atspi_children_and_parent2)
 }
 END_TEST
 
+<<<<<<< HEAD
 /* Initial value of translation domain should be NULL */
 START_TEST (elm_atspi_translation_domain_get)
 {
@@ -327,19 +356,37 @@ START_TEST (elm_atspi_relationship_append)
    elm_init(0, NULL);
    generate_app();
 
+=======
+START_TEST (elm_atspi_elm_widget_custom_relations)
+{
+>>>>>>> 876f95b... atspi: add new APIs for setting atspi relationship.
    Elm_Atspi_Relation_Set set;
    Elm_Atspi_Relation *rel, *rel_to, *rel_from;
    Eina_List *l;
 
+<<<<<<< HEAD
    eo_do(g_btn, elm_interface_atspi_accessible_relationship_append(ELM_ATSPI_RELATION_FLOWS_TO, g_bg));
    eo_do(g_btn, elm_interface_atspi_accessible_relationship_append(ELM_ATSPI_RELATION_FLOWS_FROM, g_win));
    eo_do(g_btn, set = elm_interface_atspi_accessible_relation_set_get());
 
+=======
+   elm_init(0, NULL);
+   generate_app2();
+
+   eo_do(g_btn, set = elm_interface_atspi_accessible_relation_set_get());
+   ck_assert(set == NULL);
+
+   eo_do(g_btn, elm_interface_atspi_accessible_relationship_append(ELM_ATSPI_RELATION_FLOWS_TO, g_lbl));
+   eo_do(g_btn, elm_interface_atspi_accessible_relationship_append(ELM_ATSPI_RELATION_FLOWS_FROM, g_win));
+
+   eo_do(g_btn, set = elm_interface_atspi_accessible_relation_set_get());
+>>>>>>> 876f95b... atspi: add new APIs for setting atspi relationship.
    ck_assert(set != NULL);
    ck_assert(eina_list_count(set) >= 2);
 
    rel_to = rel_from = NULL;
    EINA_LIST_FOREACH(set, l, rel)
+<<<<<<< HEAD
    {
       if (rel->type == ELM_ATSPI_RELATION_FLOWS_TO)
         rel_to = rel;
@@ -400,11 +447,30 @@ START_TEST (elm_atspi_relationship_remove)
    eo_do(g_btn, elm_interface_atspi_accessible_relationship_remove(ELM_ATSPI_RELATION_FLOWS_TO, g_bg));
    eo_do(g_btn, set = elm_interface_atspi_accessible_relation_set_get());
 
+=======
+     {
+        if (rel->type == ELM_ATSPI_RELATION_FLOWS_TO)
+          rel_to = rel;
+        if (rel->type == ELM_ATSPI_RELATION_FLOWS_FROM)
+          rel_from = rel;
+     }
+
+   ck_assert(rel_to != NULL);
+   ck_assert(rel_from != NULL);
+   ck_assert(eina_list_data_find(rel_to->objects, g_lbl) != NULL);
+   ck_assert(eina_list_data_find(rel_from->objects, g_win) != NULL);
+
+   elm_atspi_relation_set_free(&set);
+
+   eo_do(g_btn, elm_interface_atspi_accessible_relationship_remove(ELM_ATSPI_RELATION_FLOWS_TO, g_lbl));
+   eo_do(g_btn, set = elm_interface_atspi_accessible_relation_set_get());
+>>>>>>> 876f95b... atspi: add new APIs for setting atspi relationship.
    ck_assert(set != NULL);
    ck_assert(eina_list_count(set) >= 1);
 
    rel_to = rel_from = NULL;
    EINA_LIST_FOREACH(set, l, rel)
+<<<<<<< HEAD
    {
       if (rel->type == ELM_ATSPI_RELATION_FLOWS_TO)
         rel_to = rel;
@@ -488,6 +554,15 @@ START_TEST (elm_atspi_relationships_clear)
    }
 
    elm_atspi_relation_set_free(set);
+=======
+     {
+        if (rel->type == ELM_ATSPI_RELATION_FLOWS_TO)
+          ck_assert(EINA_FALSE);
+     }
+
+   elm_atspi_relation_set_free(&set);
+
+>>>>>>> 876f95b... atspi: add new APIs for setting atspi relationship.
    elm_shutdown();
 }
 END_TEST
@@ -505,9 +580,13 @@ void elm_test_atspi(TCase *tc)
    tcase_add_test(tc, elm_atspi_description_get);
    tcase_add_test(tc, elm_atspi_children_and_parent);
    tcase_add_test(tc, elm_atspi_children_and_parent2);
+<<<<<<< HEAD
    tcase_add_test(tc, elm_atspi_translation_domain_get);
    tcase_add_test(tc, elm_atspi_translation_domain_set);
    tcase_add_test(tc, elm_atspi_relationship_append);
    tcase_add_test(tc, elm_atspi_relationship_remove);
    tcase_add_test(tc, elm_atspi_relationships_clear);
+=======
+   tcase_add_test(tc, elm_atspi_elm_widget_custom_relations);
+>>>>>>> 876f95b... atspi: add new APIs for setting atspi relationship.
 }