atspi : Fix abnormal behavior and relationship for rotary selector item 69/158969/2 accepted/tizen/unified/20171108.063524 submit/tizen/20171107.093719
authorJunsuChoi <jsuya.choi@samsung.com>
Mon, 6 Nov 2017 07:09:35 +0000 (16:09 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Mon, 6 Nov 2017 07:55:01 +0000 (16:55 +0900)
   Resets rotary selector item's relationship
   when screen_reader_changed callback is called.
   and If the rotary_event is COUNTER_CLOCKWISE,
   rotary_event should ignore action once.

Change-Id: Ib599602ac45d04d80ba3f9fa6abf90f31c75b47a

src/wearable/efl_extension_rotary_selector.c

index 7dd4cf534e0cb6b8beece82e1d207128dfa277eb..32441d54916579b00ca22ac1024da4125805c8aa 100644 (file)
@@ -1484,7 +1484,14 @@ _rotary_selector_rotary_cb(void *data, Evas_Object *obj, Eext_Rotary_Event_Info
           {
              if (!rsd->acceleration)
                {
-                  rsd->selected_index -= 1;
+                  if (elm_atspi_bridge_utils_is_screen_reader_enabled() && rsd->is_first_rotary_control)
+                    {
+                       rsd->is_first_rotary_control = EINA_FALSE;
+                    }
+                  else
+                    {
+                       rsd->selected_index -= 1;
+                    }
                }
              else
                {
@@ -4104,6 +4111,7 @@ _rotary_selector_screen_reader_changed(void *data, Evas_Object *obj, void *event
 {
    Eina_List *l = NULL;
    Eext_Rotary_Selector_Item *item = NULL;
+   Eext_Rotary_Selector_Item *prev_item = NULL;
    Eext_Rotary_Selector_Data *rsd = (Eext_Rotary_Selector_Data *)data;
    if (!rsd)
       return ;
@@ -4111,15 +4119,24 @@ _rotary_selector_screen_reader_changed(void *data, Evas_Object *obj, void *event
    if (elm_atspi_bridge_utils_is_screen_reader_enabled())
      {
         evas_object_smart_callback_add(rsd->rotary_selector, "more,option,opened", _rotary_selector_moreoption_opened_cb, rsd);
-
+        item = eina_list_nth(rsd->item_list, 0);
+        if (item)
+          {
+             _accessibility_rotary_selector_item_relationship_set(obj, item->base.obj);
+          }
         EINA_LIST_FOREACH(rsd->item_list, l, item)
           {
              evas_object_freeze_events_set(item->base.obj, EINA_FALSE);
              evas_object_smart_callback_add(item->base.obj, "clicked",_accessibility_item_btn_clicked_cb, (Eext_Rotary_Selector_Data*)rsd);
              evas_object_smart_callback_add(item->base.obj, "atspi,highlighted", _accessibility_item_btn_highlighted_cb, (Eext_Rotary_Selector_Data*)rsd);
              elm_atspi_accessible_gesture_cb_set(item->base.obj, _accessibility_item_gesutre_cb, (Eext_Rotary_Selector_Data*)rsd);
+             if (prev_item)
+               {
+                  _accessibility_rotary_selector_item_relationship_set(prev_item->base.obj, item->base.obj);
+               }
+             prev_item = item;
           }
-
+        _accessibility_item_chain_end_set(rsd);
         rsd->is_first_rotary_control = EINA_TRUE;
      }
    else