Merge "Fix for naviframe title exposition as accessibility object" into tizen
authorPrasoon Singh <prasoon.16@samsung.com>
Fri, 15 Apr 2016 06:42:38 +0000 (23:42 -0700)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Fri, 15 Apr 2016 06:42:38 +0000 (23:42 -0700)
37 files changed:
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_main.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_win.c
src/tests/elm_test_atspi.c

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 84cf723..70322a9 100644 (file)
@@ -1011,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;
 }
 
@@ -1302,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..4ee68f9 100644 (file)
@@ -1706,8 +1706,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;
 }
 
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 f153e23..8264048 100644 (file)
@@ -400,6 +400,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;
@@ -5512,11 +5520,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)
@@ -5566,7 +5577,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;
@@ -5724,6 +5738,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 22c9d8c..203fa8c 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..374a4d0 100644 (file)
@@ -8019,11 +8019,13 @@ _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;
 
    buf = eina_strbuf_new();
 
@@ -8274,6 +8276,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 1cd5d61..0da1a5e 100644 (file)
@@ -2320,6 +2320,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 6cea2ac..8dcb290 100644 (file)
@@ -1154,6 +1154,7 @@ EAPI void
 elm_language_set(const char *lang)
 {
    setlocale(LC_ALL, lang);
+   evas_language_reinit();
    _elm_win_translate();
 }
 
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..8c2a2fa 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
@@ -2395,6 +2396,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);
 
@@ -3825,8 +3829,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 +3905,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 ce0a062..ee696a0 100644 (file)
@@ -4488,6 +4488,9 @@ _elm_widget_item_eo_base_destructor(Eo *eo_item, Elm_Widget_Item_Data *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 +5773,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;
 
@@ -6035,6 +6042,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)
 {
@@ -6190,5 +6205,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..1245b17 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,9 @@ 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 */
+   ///////////////////////////////////
 
    Eina_Bool                      disabled : 1;
    Eina_Bool                      on_deletion : 1;
index e466965..8dd77cf 100644 (file)
@@ -531,6 +531,10 @@ class Elm.Widget_Item(Eo.Base, Elm_Interface_Atspi_Accessible,
            Eo.Base.destructor;
            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 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.
 }