atspi : During the highlight grab, out signal is not sent. 54/154654/3
authorJunsuChoi <jsuya.choi@samsung.com>
Wed, 11 Oct 2017 03:12:45 +0000 (12:12 +0900)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Fri, 13 Oct 2017 05:17:45 +0000 (05:17 +0000)
   There is an action that takes time to complete
   the highlight grab, such as scroll bring in.
   So the highlight box can be outside the screen.
   After the highlight grab process is completed,
   will check the highlight box status.

Change-Id: I539e17f9685d9d7540ffd95b987e809161a0480f

src/lib/elm_widget.c
src/lib/elm_widget.h
src/lib/elm_win.c

index 8c391671009fd78246cd9b4bd497a211b44f1bbb..3691b6a116e6870f878f7f258bc45d0816508bf6 100644 (file)
@@ -6569,6 +6569,22 @@ _accessible_highlight_region_show(Eo* obj)
 }
 //
 
+//TIZEN_ONLY(20171011) : atspi : During the highlight grab, out signal is not sent.
+Eina_Bool
+_elm_widget_accessibility_highlight_grabbing_get(Eo *obj)
+{
+   ELM_WIDGET_DATA_GET(obj, wd);
+   return wd->highlight_grabbing;
+}
+
+void
+_elm_widget_accessibility_highlight_grabbing_set(Eo *obj, Eina_Bool grabbing)
+{
+   ELM_WIDGET_DATA_GET(obj, wd);
+   wd->highlight_grabbing = grabbing;
+}
+//
+
 //TIZEN_ONLY(20160329): atspi: implement HighlightGrab and HighlightClear methods (29e253e2f7ef3c632ac3a64c489bf569df407f30)
 EOLIAN static Eina_Bool
 _elm_widget_elm_interface_atspi_component_highlight_grab(Eo *obj, Elm_Widget_Smart_Data *pd EINA_UNUSED)
@@ -6577,6 +6593,10 @@ _elm_widget_elm_interface_atspi_component_highlight_grab(Eo *obj, Elm_Widget_Sma
    if(!_elm_atspi_enabled())
       return EINA_FALSE;
 
+   //TIZEN_ONLY(20171011) : atspi : During the highlight grab, out signal is not sent.
+   _elm_widget_accessibility_highlight_grabbing_set(obj, EINA_TRUE);
+   //
+
    //TIZEN_ONLY(20170119): Show the object highlighted by highlight_grab when the object is completely out of the scroll
    _accessible_highlight_region_show(obj);
    //
@@ -6587,6 +6607,9 @@ _elm_widget_elm_interface_atspi_component_highlight_grab(Eo *obj, Elm_Widget_Sma
    // TIZEN_ONLY(20161018): add highlighted/unhighlighted signal for atspi
    evas_object_smart_callback_call(obj, SIG_WIDGET_ATSPI_HIGHLIGHTED, NULL);
    //
+   //TIZEN_ONLY(20171011) : atspi : During the highlight grab, out signal is not sent.
+   _elm_widget_accessibility_highlight_grabbing_set(obj, EINA_FALSE);
+   //
    return EINA_TRUE;
 }
 
@@ -7136,6 +7159,9 @@ _elm_widget_item_elm_interface_atspi_component_highlight_grab(Eo *obj, Elm_Widge
 {
    if (!sd) return EINA_FALSE;
    if (!sd->view) return EINA_FALSE;
+   //TIZEN_ONLY(20171011) : atspi : During the highlight grab, out signal is not sent.
+   _elm_widget_accessibility_highlight_grabbing_set(obj, EINA_TRUE);
+   //
 
    //TIZEN_ONLY(20170119): Show the object highlighted by highlight_grab when the object is completely out of the scroll
    _accessible_highlight_region_show(sd->view);
@@ -7150,6 +7176,9 @@ _elm_widget_item_elm_interface_atspi_component_highlight_grab(Eo *obj, Elm_Widge
    //TIZEN_ONLY(20170412) Make atspi,(un)highlighted work on widget item
    evas_object_smart_callback_call(sd->widget, SIG_WIDGET_ATSPI_HIGHLIGHTED, obj);
    //
+   //TIZEN_ONLY(20171011) : atspi : During the highlight grab, out signal is not sent.
+   _elm_widget_accessibility_highlight_grabbing_set(obj, EINA_FALSE);
+   //
    return EINA_TRUE;
 }
 
index bf43471f1752dfdfb3c68af131617526f7c32909..910407296a5776bd0b9155b23d09d2609b4561c7 100644 (file)
@@ -474,6 +474,9 @@ typedef struct _Elm_Widget_Smart_Data
    ///TIZEN_ONLY(20170717) : expose highlight information on atspi
    Eina_Bool                     can_highlight : 1; /**< true if widget have at-spi HIGHLIGHTABLE state */
    ///
+   //TIZEN_ONLY(20171011) : atspi : During the highlight grab, out signal is not sent.
+   Eina_Bool                     highlight_grabbing : 1;
+   //
 // TIZEN_ONLY(20150705): Genlist item align feature
    Eina_Bool                     scroll_item_align_enable;
    const char                    *scroll_item_valign;
@@ -588,6 +591,11 @@ Evas_Object          *_elm_win_default_label_obj_get(Evas_Object *obj);
 void                 *_elm_object_accessibility_currently_highlighted_get();
 void                  _elm_widget_showing_geometry_get(Eo *obj, int *x, int *y, int *w, int *h);
 
+//TIZEN_ONLY(20171011) : atspi : During the highlight grab, out signal is not sent.
+Eina_Bool _elm_widget_accessibility_highlight_grabbing_get(Eo *obj);
+void _elm_widget_accessibility_highlight_grabbing_set(Eo *obj, Eina_Bool grabbing);
+//
+
 EAPI void             _elm_access_clear(Elm_Access_Info *ac);
 EAPI void             _elm_access_text_set(Elm_Access_Info *ac, int type, const char *text);
 EAPI void             _elm_access_callback_set(Elm_Access_Info *ac, int type, Elm_Access_Info_Cb func, const void *data);
index 39f446b1ace5c3988b302e94c1473d67c6a73b28..e7b0d1849d3f490b27526a954aca90ea876c80f3 100644 (file)
@@ -1044,28 +1044,33 @@ _elm_win_accessibility_highlight_simple_setup(Elm_Win_Data *sd,
    //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
    evas_object_geometry_get(target, &ox, &oy, NULL, NULL);
 
-   if (((w < 0 && ox > sd->accessibility_highlight.cur.x) || (h < 0 && oy < sd->accessibility_highlight.cur.y))
-     && sd->accessibility_highlight.cur.need_moved
-     && eo_isa(target, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN))
+   //TIZEN_ONLY(20171011) : atspi : During the highlight grab, out signal is not sent.
+   if (!_elm_widget_accessibility_highlight_grabbing_get(target))
+   //
      {
-        eo_do(target, role = elm_interface_atspi_accessible_role_get());
-        if (role && role != ELM_ATSPI_ROLE_MENU_ITEM && role != ELM_ATSPI_ROLE_LIST_ITEM)
+        if (((w < 0 && ox > sd->accessibility_highlight.cur.x) || (h < 0 && oy < sd->accessibility_highlight.cur.y))
+          && sd->accessibility_highlight.cur.need_moved
+          && eo_isa(target, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN))
           {
-             elm_interface_atspi_accessible_move_outed_signal_emit(target, ELM_ATSPI_MOVE_OUTED_TOP_LEFT);
-             sd->accessibility_highlight.cur.need_moved = EINA_FALSE;
-             return ;
+             eo_do(target, role = elm_interface_atspi_accessible_role_get());
+             if (role && role != ELM_ATSPI_ROLE_MENU_ITEM && role != ELM_ATSPI_ROLE_LIST_ITEM)
+               {
+                  elm_interface_atspi_accessible_move_outed_signal_emit(target, ELM_ATSPI_MOVE_OUTED_TOP_LEFT);
+                  sd->accessibility_highlight.cur.need_moved = EINA_FALSE;
+                  return ;
+               }
           }
-     }
-   else if (((w < 0 && ox < sd->accessibility_highlight.cur.x) || (h < 0 && oy > sd->accessibility_highlight.cur.y))
-           && sd->accessibility_highlight.cur.need_moved
-           && eo_isa(target, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN))
-     {
-        eo_do(target, role = elm_interface_atspi_accessible_role_get());
-        if (role && role != ELM_ATSPI_ROLE_MENU_ITEM && role != ELM_ATSPI_ROLE_LIST_ITEM)
+        else if (((w < 0 && ox < sd->accessibility_highlight.cur.x) || (h < 0 && oy > sd->accessibility_highlight.cur.y))
+                && sd->accessibility_highlight.cur.need_moved
+                && eo_isa(target, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN))
           {
-             elm_interface_atspi_accessible_move_outed_signal_emit(target, ELM_ATSPI_MOVE_OUTED_BOTTOM_RIGHT);
-                sd->accessibility_highlight.cur.need_moved = EINA_FALSE;
-             return ;
+             eo_do(target, role = elm_interface_atspi_accessible_role_get());
+             if (role && role != ELM_ATSPI_ROLE_MENU_ITEM && role != ELM_ATSPI_ROLE_LIST_ITEM)
+               {
+                  elm_interface_atspi_accessible_move_outed_signal_emit(target, ELM_ATSPI_MOVE_OUTED_BOTTOM_RIGHT);
+                  sd->accessibility_highlight.cur.need_moved = EINA_FALSE;
+                  return ;
+               }
           }
      }
    //