elm: [genlist]do not emit AT-SPI "children-changed" events
authorPrasoon Singh <prasoon.16@samsung.com>
Thu, 30 Nov 2017 06:44:14 +0000 (12:14 +0530)
committerJiyoun Park <jy0703.park@samsung.com>
Thu, 21 Dec 2017 10:50:19 +0000 (19:50 +0900)
@tizen_feature

orignal patch : 533aba0c4673783392114850380b6c71a4f4a92a

Change-Id: I60c5bd0226b7012c9530835efb175ad441ac5adf

src/lib/elementary/efl_access.c
src/lib/elementary/elm_atspi_bridge.c
src/lib/elementary/elm_genlist.c

index a8e4d78..f64ddbf 100644 (file)
@@ -297,12 +297,14 @@ _efl_access_role_get(Eo *obj EINA_UNUSED, Efl_Access_Data *pd EINA_UNUSED)
 }
 
 EOLIAN static void
-_efl_access_role_set(Eo *obj, Efl_Access_Data *pd EINA_UNUSED, Efl_Access_Role role)
+_efl_access_role_set(Eo *obj EINA_UNUSED, Efl_Access_Data *pd, Efl_Access_Role role)
 {
    if (pd->role != role)
      {
         pd->role = role;
+        //TIZEN_ONLY(20160708) Do not send role changed signal - 10000 list items send 10000 IPC.
         efl_access_role_changed_signal_emit(obj);
+        //
      }
 }
 
index b533627..7cbff49 100644 (file)
@@ -3322,88 +3322,105 @@ _iter_interfaces_append(Eldbus_Message_Iter *iter, const Eo *obj)
 static Eina_Bool
 _cache_item_reference_append_cb(Eo *bridge, Eo *data, Eldbus_Message_Iter *iter_array)
 {
-  if (!efl_ref_get(data) || efl_destructed_is(data))
-    return EINA_TRUE;
+   if (!efl_ref_get(data) || efl_destructed_is(data))
+     return EINA_TRUE;
+
+   Eldbus_Message_Iter *iter_struct, *iter_sub_array;
+   Efl_Access_State_Set states;
+   Efl_Access_Role role;
+   Eo *root;
+   root = efl_access_root_get(EFL_ACCESS_MIXIN);
 
-  Eldbus_Message_Iter *iter_struct, *iter_sub_array;
-  Efl_Access_State_Set states;
-  Efl_Access_Role role;
-  Eo *root;
-  root = efl_access_root_get(EFL_ACCESS_MIXIN);
+   role = efl_access_role_get(data);
 
-  role = efl_access_role_get(data);
+   iter_struct = eldbus_message_iter_container_new(iter_array, 'r', NULL);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(iter_struct, EINA_TRUE);
 
-  iter_struct = eldbus_message_iter_container_new(iter_array, 'r', NULL);
-  EINA_SAFETY_ON_NULL_RETURN_VAL(iter_struct, EINA_TRUE);
+   /* Marshall object path */
+   _bridge_iter_object_reference_append(bridge, iter_struct, data);
 
-  /* Marshall object path */
-  _bridge_iter_object_reference_append(bridge, iter_struct, data);
+   /* Marshall application */
+   _bridge_iter_object_reference_append(bridge, iter_struct, root);
 
-  /* Marshall application */
-  _bridge_iter_object_reference_append(bridge, iter_struct, root);
+   Eo *parent = NULL;
+   parent = efl_access_parent_get(data);
+   /* Marshall parent */
+   if ((!parent) && (EFL_ACCESS_ROLE_APPLICATION == role))
+     _object_desktop_reference_append(iter_struct);
+   else
+     _bridge_iter_object_reference_append(bridge, iter_struct, parent);
+
+   /* Marshall children  */
+   Eina_List *children_list = NULL, *l;
+   Eo *child;
 
-  Eo *parent = NULL;
-  parent = efl_access_parent_get(data);
-  /* Marshall parent */
-  if ((!parent) && (EFL_ACCESS_ROLE_APPLICATION == role))
-    _object_desktop_reference_append(iter_struct);
-  else
-    _bridge_iter_object_reference_append(bridge, iter_struct, parent);
+   //TIZEN_ONLY(20150709) Do not register children of MANAGES_DESCENDATS objects
+   Efl_Access_State_Set ss;
+   ss = efl_access_state_set_get(data);
+   //
 
-  /* Marshall children  */
-  Eina_List *children_list = NULL, *l;
-  Eo *child;
+   //TIZEN_ONLY(20150709) Do not register children of MANAGES_DESCENDATS objects
+   //children_list = efl_access_children_get(data);
+   //
 
-  children_list = efl_access_children_get(data);
   iter_sub_array = eldbus_message_iter_container_new(iter_struct, 'a', "(so)");
   EINA_SAFETY_ON_NULL_GOTO(iter_sub_array, fail);
-
+   //TIZEN_ONLY(20150709) Do not register children of MANAGES_DESCENDATS objects
+   if (!STATE_TYPE_GET(ss, EFL_ACCESS_STATE_MANAGES_DESCENDANTS))
+     {
+        children_list = efl_access_children_get(data);
+   //
   EINA_LIST_FOREACH(children_list, l, child)
      _bridge_iter_object_reference_append(bridge, iter_sub_array, child);
-
+   //TIZEN_ONLY(20150709) Do not register children of MANAGES_DESCENDATS objects
+        eina_list_free(children_list);
+     }
+   //
   eldbus_message_iter_container_close(iter_struct, iter_sub_array);
-  eina_list_free(children_list);
+   //TIZEN_ONLY(20150709) Do not register children of MANAGES_DESCENDATS objects
+   //eina_list_free(children_list);
+   //
 
-  /* Marshall interfaces */
-  _iter_interfaces_append(iter_struct, data);
+   /* Marshall interfaces */
+   _iter_interfaces_append(iter_struct, data);
 
-  /* Marshall name */
-  const char *name = NULL;
-  name = efl_access_name_get(data);
-  if (!name)
-    name = "";
+   /* Marshall name */
+   const char *name = NULL;
+   name = efl_access_name_get(data);
+   if (!name)
+     name = "";
 
-  eldbus_message_iter_basic_append(iter_struct, 's', name);
+   eldbus_message_iter_basic_append(iter_struct, 's', name);
 
-  /* Marshall role */
-  eldbus_message_iter_basic_append(iter_struct, 'u', role);
+   /* Marshall role */
+   eldbus_message_iter_basic_append(iter_struct, 'u', role);
 
-  /* Marshall description */
-  const char* description = NULL;
-  description = efl_access_description_get(data);
-  if (!description)
-    description = "";
-  eldbus_message_iter_basic_append(iter_struct, 's', description);
+   /* Marshall description */
+   const char* description = NULL;
+   description = efl_access_description_get(data);
+   if (!description)
+     description = "";
+   eldbus_message_iter_basic_append(iter_struct, 's', description);
 
-  /* Marshall state set */
-  iter_sub_array = eldbus_message_iter_container_new(iter_struct, 'a', "u");
-  EINA_SAFETY_ON_NULL_GOTO(iter_sub_array, fail);
+   /* Marshall state set */
+   iter_sub_array = eldbus_message_iter_container_new(iter_struct, 'a', "u");
+   EINA_SAFETY_ON_NULL_GOTO(iter_sub_array, fail);
 
-  states = efl_access_state_set_get(data);
+   states = efl_access_state_set_get(data);
 
-  unsigned int s1 = states & 0xFFFFFFFF;
-  unsigned int s2 = (states >> 32) & 0xFFFFFFFF;
-  eldbus_message_iter_basic_append(iter_sub_array, 'u', s1);
-  eldbus_message_iter_basic_append(iter_sub_array, 'u', s2);
+   unsigned int s1 = states & 0xFFFFFFFF;
+   unsigned int s2 = (states >> 32) & 0xFFFFFFFF;
+   eldbus_message_iter_basic_append(iter_sub_array, 'u', s1);
+   eldbus_message_iter_basic_append(iter_sub_array, 'u', s2);
 
-  eldbus_message_iter_container_close(iter_struct, iter_sub_array);
-  eldbus_message_iter_container_close(iter_array, iter_struct);
+   eldbus_message_iter_container_close(iter_struct, iter_sub_array);
+   eldbus_message_iter_container_close(iter_array, iter_struct);
 
-  return EINA_TRUE;
+   return EINA_TRUE;
 
 fail:
-  if (iter_struct) eldbus_message_iter_del(iter_struct);
-  return EINA_TRUE;
+   if (iter_struct) eldbus_message_iter_del(iter_struct);
+   return EINA_TRUE;
 }
 
 static Eldbus_Message *
index cec0078..00a1981 100644 (file)
@@ -1861,6 +1861,11 @@ _item_realize(Elm_Gen_Item *it, const int index, Eina_Bool calc)
           it->item->nocache_once = EINA_FALSE;
      }
 
+   //TIZEN_ONLY(20150709) Do not register children of MANAGES_DESCENDATS objects
+   if (_elm_config->atspi_mode)
+      efl_access_children_changed_added_signal_emit(sd->obj, EO_OBJ(it));
+   //
+
    /* access */
    if (_elm_config->access_mode) _access_widget_item_register(it);