[access] Handle case where last highlighted object is in different window
authorPrasoon Singh <prasoon.16@samsung.com>
Wed, 27 Nov 2019 11:17:16 +0000 (16:47 +0530)
committerJongmin Lee <jm105.lee@samsung.com>
Tue, 3 Mar 2020 21:24:59 +0000 (06:24 +0900)
When highlight_grab is called simultaneously fo different window object
highlight frame remains on last window.

Change-Id: I60dbfefda83a68aaa641aa289e92d3b99f6add26
Signed-off-by: Prasoon Singh <prasoon.16@samsung.com>
src/lib/elementary/elm_main.c

index 099e0c7..079139f 100644 (file)
@@ -2263,7 +2263,35 @@ elm_object_accessibility_highlight_set(void *obj, Eina_Bool visible)
    else
      {
         if (visible)
-          _accessibility_currently_highlighted_obj = obj;
+          {
+             //TIZEN_ONLY(20200224): Handle case where last highlighted object is in different window
+             if (_accessibility_currently_highlighted_obj &&
+                 _accessibility_currently_highlighted_obj != (void*)obj)
+               {
+                  Evas_Object *last_win = NULL, *last_target = NULL, *last_hobj = NULL;
+                  last_hobj = (Evas_Object *)_accessibility_currently_highlighted_obj;
+                  if (efl_isa(last_hobj, ELM_WIDGET_ITEM_CLASS))
+                    {
+                       Elm_Widget_Item_Data *id = efl_data_scope_get(last_hobj, ELM_WIDGET_ITEM_CLASS);
+                       last_target = id->view;
+                    }
+                  else
+                     last_target = last_hobj;
+                  if (elm_object_widget_check(last_target))
+                     last_win = elm_object_top_widget_get(last_target);
+                  else
+                     last_win = elm_object_top_widget_get(elm_object_parent_widget_get(last_target));
+                  if (last_win != win)
+                    {
+                       if (efl_isa(last_target, EFL_UI_LAYOUT_CLASS) && elm_widget_access_highlight_in_theme_get(last_target))
+                         elm_widget_signal_emit(last_target, "elm,action,access_highlight,hide", "elm");
+                       else
+                         _elm_win_object_set_accessibility_highlight(last_win, last_target, EINA_FALSE);
+                    }
+               }
+             //
+               _accessibility_currently_highlighted_obj = obj;
+          }
      }
 
    if (efl_isa(target, EFL_UI_LAYOUT_CLASS) && elm_widget_access_highlight_in_theme_get(target))