atspi : Add attributes support for the default label. 22/169422/5
authorJunsuChoi <jsuya.choi@samsung.com>
Tue, 6 Feb 2018 11:40:19 +0000 (20:40 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Fri, 9 Feb 2018 05:15:42 +0000 (14:15 +0900)
   If "default_label" attribute is appended "enabled_without_window" from window,
   it works with default labels for some roles.
   and if "default_label" attribute is appended "disabled"
   from object that work default label, it don't work default label

Change-Id: I4516435133e77929852740f2b584611fe51763e0

src/lib/elm_atspi_bridge.c

index ef2674b..c0361e2 100644 (file)
@@ -222,8 +222,9 @@ static const Elm_Atspi_Bridge_Event_Handler event_handlers[] = {
 enum
 {
   ELM_ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED = 0,
-  ELM_ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_DISABLED = 1 << 0,
-  ELM_ACCESSIBLE_WINDOW_ACTIVATE_INFO_KEYBOARD = 1 << 1,
+  ELM_ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED_WITHOUT_WINDOW = 1 << 0,
+  ELM_ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_DISABLED = 1 << 1,
+  ELM_ACCESSIBLE_WINDOW_ACTIVATE_INFO_KEYBOARD = 1 << 2,
 };
 //
 
@@ -1405,13 +1406,15 @@ static Eldbus_Message *
 _accessible_default_label_info_get(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
 {
    Eldbus_Message *ret;
-   Eldbus_Message_Iter *iter;
+   Eldbus_Message_Iter *iter, *iter_dict, *iter_entry;
    const char *obj_path = eldbus_message_path_get(msg);
    Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
    Eo *obj = _bridge_object_from_path(bridge, obj_path);
    Eo *default_label_obj;
    Elm_Atspi_Role role;
    AtspiRole atspi_role = ATSPI_ROLE_INVALID;
+   Eina_List *attrs, *l;
+   Elm_Atspi_Attribute *attr;
 
    ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, msg);
 
@@ -1429,6 +1432,21 @@ _accessible_default_label_info_get(const Eldbus_Service_Interface *iface, const
    atspi_role = role > ELM_ATSPI_ROLE_LAST_DEFINED ? ATSPI_ROLE_LAST_DEFINED : elm_roles_to_atspi_roles[role][1];
    eldbus_message_iter_basic_append(iter, 'u', atspi_role);
 
+   eo_do(default_label_obj, attrs = elm_interface_atspi_accessible_attributes_get());
+   iter_dict = eldbus_message_iter_container_new(iter, 'a', "{ss}");
+   EINA_SAFETY_ON_NULL_RETURN_VAL(iter_dict, NULL);
+
+   EINA_LIST_FOREACH(attrs, l, attr)
+     {
+        iter_entry = eldbus_message_iter_container_new(iter_dict, 'e', NULL);
+        EINA_SAFETY_ON_NULL_RETURN_VAL(iter_entry, NULL);
+        eldbus_message_iter_arguments_append(iter_entry, "ss", attr->key, attr->value);
+        eldbus_message_iter_container_close(iter_dict, iter_entry);
+     }
+
+   eldbus_message_iter_container_close(iter, iter_dict);
+   elm_atspi_attributes_list_free(attrs);
+
    return ret;
 }
 //
@@ -5727,10 +5745,16 @@ _window_activated_detail_value_add(Eo *obj)
    eo_do(obj, attr_list = elm_interface_atspi_accessible_attributes_get());
    EINA_LIST_FOREACH(attr_list, l, attr)
      {
-        if (!strcmp(attr->key, "default_label") && !strcmp(attr->value, "disabled"))
+        if (!strcmp(attr->key, "default_label"))
           {
-             ret |= ELM_ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_DISABLED;
-             break;
+             if(!strcmp(attr->value, "enabled_without_window"))
+               {
+                  ret |= ELM_ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED_WITHOUT_WINDOW;
+               }
+             else if(!strcmp(attr->value, "disabled"))
+               {
+                  ret |= ELM_ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_DISABLED;
+               }
           }
      }
    if (attr_list)