spinner: Fix atspi mode focus movement policy. 94/280394/4
authorWoochanlee <wc0917.lee@samsung.com>
Mon, 29 Aug 2022 10:34:47 +0000 (19:34 +0900)
committerwoochan lee <wc0917.lee@samsung.com>
Wed, 31 Aug 2022 05:30:02 +0000 (05:30 +0000)
Change-Id: I6a7bd26272ee21cc7ec09e1977c31efcd8ee6d57

src/lib/elementary/efl_ui_clock.c
src/lib/elementary/elm_spinner.c
src/lib/elementary/elm_widget_spinner.h
src/lib/elementary_tizen/elm_genlist.c

index 663b0d0..a2d3109 100755 (executable)
@@ -314,6 +314,14 @@ _field_list_arrange(Evas_Object *obj)
           elm_layout_content_set(obj, buf, field->item_obj);
         else
           evas_object_hide(field->item_obj);
+
+        if (_elm_atspi_enabled())
+          {
+            if (evas_object_visible_get(field->item_obj))
+              efl_access_object_can_highlight_set(field->item_obj, EINA_TRUE);
+            else
+              efl_access_object_can_highlight_set(field->item_obj, EINA_FALSE);
+          }
      }
    //////////////////////////////////////////////////////////////////////////////
 
index 82dbe4f..a981656 100644 (file)
@@ -651,6 +651,14 @@ _genlist_hide(Evas_Object *obj)
      elm_layout_signal_emit(obj, "elm,state,inactive", "elm");
 
    sd->genlist_visible = EINA_FALSE;
+
+   if (_elm_atspi_enabled())
+     {
+        efl_access_object_can_highlight_set(sd->access_prev_item, EINA_FALSE);
+        efl_access_object_can_highlight_set(sd->access_aligned_item, EINA_FALSE);
+        efl_access_object_can_highlight_set(sd->access_next_item, EINA_FALSE);
+        efl_access_object_can_highlight_set(sd->text_button, EINA_TRUE);
+     }
 }
 
 static void
@@ -678,6 +686,13 @@ _genlist_item_aligned_cb(void *data,
 
    if (!event_info) return;
 
+   if (_elm_atspi_enabled() && sd->wrap)
+     {
+        efl_access_object_can_highlight_set(sd->access_prev_item, EINA_FALSE);
+        efl_access_object_can_highlight_set(sd->access_aligned_item, EINA_FALSE);
+        efl_access_object_can_highlight_set(sd->access_next_item, EINA_FALSE);
+     }
+
    sd->aligned_item = (Elm_Object_Item *)event_info;
 
    //TIZEN_ONLY(20200413): flick to open feature
@@ -700,6 +715,29 @@ _genlist_item_aligned_cb(void *data,
    if (next_item) __elm_genlist_item_show_center_adjust(next_item, EINA_TRUE);
    //
    _genlist_item_value_apply(data);
+
+   if (_elm_atspi_enabled() && sd->wrap)
+     {
+        Elm_Object_Item *prev_item;
+
+        if (sd->aligned_item == elm_genlist_first_item_get(sd->genlist))
+          prev_item = elm_genlist_last_item_get(sd->genlist);
+        else
+          prev_item = elm_genlist_item_prev_get(sd->aligned_item);
+        if (sd->aligned_item == elm_genlist_last_item_get(sd->genlist))
+          next_item = elm_genlist_first_item_get(sd->genlist);
+        else
+          next_item = elm_genlist_item_next_get(sd->aligned_item);
+
+        sd->access_prev_item = prev_item;
+        sd->access_aligned_item = sd->aligned_item;
+        sd->access_next_item = next_item;
+
+        efl_access_object_can_highlight_set(sd->access_prev_item, EINA_TRUE);
+        efl_access_object_can_highlight_set(sd->access_aligned_item, EINA_TRUE);
+        efl_access_object_can_highlight_set(sd->access_next_item, EINA_TRUE);
+        efl_access_component_highlight_grab(sd->access_aligned_item);
+     }
 }
 
 static void
@@ -967,6 +1005,17 @@ _set_genlist_item_state(Elm_Spinner_Data* sd)
 
     if (sd->next_item)
       elm_object_item_signal_emit(sd->next_item, "elm,state,down", "elm");
+
+    if (_elm_atspi_enabled() && sd->wrap)
+      {
+         sd->access_prev_item = sd->prev_item;
+         sd->access_aligned_item = sd->aligned_item;
+         sd->access_next_item = sd->next_item;
+
+         efl_access_object_can_highlight_set(sd->access_prev_item, EINA_TRUE);
+         efl_access_object_can_highlight_set(sd->access_aligned_item, EINA_TRUE);
+         efl_access_object_can_highlight_set(sd->access_next_item, EINA_TRUE);
+      }
 }
 
 static void
@@ -1006,6 +1055,12 @@ _genlist_show_cb(void *data,
    //
    evas_object_hide(sd->text_button);
 
+   if (_elm_atspi_enabled())
+     {
+        efl_access_component_highlight_grab(obj);
+        efl_access_object_can_highlight_set(sd->text_button, EINA_FALSE);
+     }
+
    if (sd->aligned_item)
      elm_genlist_item_show(sd->aligned_item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
    else
@@ -1070,6 +1125,8 @@ _toggle_genlist(Evas_Object *obj)
                   sp_item_data->spinner_data = sd;
 
                   Elm_Object_Item* item = elm_genlist_item_append(sd->genlist, sd->itc, sp_item_data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                  if (_elm_atspi_enabled() && sd->wrap)
+                    efl_access_object_can_highlight_set(item, EINA_FALSE);
                   sd->genlist_items = eina_list_append(sd->genlist_items, item);
 
                   if ((fabs(i - sd->val) < DBL_EPSILON))
@@ -1082,8 +1139,13 @@ _toggle_genlist(Evas_Object *obj)
                   Elm_Genlist_Item_Class *padding_itc = elm_genlist_item_class_new();
                   padding_itc->item_style = "spinner/padding";
 
-                  elm_genlist_item_prepend(sd->genlist, padding_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-                  elm_genlist_item_append(sd->genlist, padding_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                  Elm_Object_Item *pre_padding_item = elm_genlist_item_prepend(sd->genlist, padding_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                  Elm_Object_Item *padding_item = elm_genlist_item_append(sd->genlist, padding_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                  if (_elm_atspi_enabled())
+                    {
+                       efl_access_object_can_highlight_set(pre_padding_item, EINA_FALSE);
+                       efl_access_object_can_highlight_set(padding_item, EINA_FALSE);
+                    }
                   elm_genlist_item_class_free(padding_itc);
                }
           }
@@ -1582,7 +1644,6 @@ _genlist_unfocused_cb(void *data,
                       void *event_info EINA_UNUSED)
 {
    _toggle_genlist(data);
-
 }
 //
 
@@ -1646,6 +1707,7 @@ _elm_spinner_efl_ui_focus_object_on_focus_update(Eo *obj, Elm_Spinner_Data *sd)
              //
              else
                _toggle_entry(obj);
+             _toggle_entry(obj);
 
              sd->entry_reactivate = EINA_FALSE;
           }
@@ -2268,6 +2330,9 @@ _update_genlist_items(Elm_Spinner_Data *sd)
         sp_item_data->spinner_data = sd;
 
         Elm_Object_Item* item = elm_genlist_item_append(sd->genlist, sd->itc, sp_item_data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+        if (_elm_atspi_enabled() && sd->wrap)
+          efl_access_object_can_highlight_set(item, EINA_FALSE);
+
         sd->genlist_items = eina_list_append(sd->genlist_items, item);
 
         if ((fabs(i - sd->val) < FLT_EPSILON))
index 579ec55..a4bef7d 100644 (file)
@@ -42,6 +42,7 @@ struct _Elm_Spinner_Data
    Evas_Object          *genlist, *g_rect;
    Elm_Genlist_Item_Class *itc;
    Elm_Object_Item      *aligned_item, *next_item, *prev_item;
+   Elm_Object_Item      *access_aligned_item, *access_next_item, *access_prev_item;
    //
    //TIZEN_ONLY(20200413): flick to open feature
    Evas_Object           *g_layer;
index 06134d6..7cdc786 100644 (file)
@@ -3758,7 +3758,7 @@ static void _item_focused(Elm_Gen_Item *it, Elm_Genlist_Item_Scrollto_Type type)
 
    evas_object_geometry_get(VIEW(it), &x, &y, &w, &h);
    evas_object_geometry_get(sd->obj, &sx, &sy, &sw, &sh);
-   if ((x < sx) || (y < sy) || ((x + w) > (sx + sw)) || ((y + h) > (sy + sh)))
+   if ((x <= sx) || (y <= sy) || ((x + w) >= (sx + sw)) || ((y + h) >= (sy + sh)))
      {
         //TIZEN_ONLY(20191217): Item selection support for non aligned items
         if ((it != sd->selecting_item) && !sd->on_focus_defer)