elm_gen****: fix focus restoring on window focus changes
authorMarcel Hollerbach <mail@marcel-hollerbach.de>
Tue, 11 Dec 2018 15:40:40 +0000 (16:40 +0100)
committerWonki Kim <wonki_.kim@samsung.com>
Tue, 18 Dec 2018 04:49:54 +0000 (13:49 +0900)
this ensures that if there is no focused item, that at least the
container is focused. This leads to the fact that the elm_genlist
/elm_gengrid is refocused when a window is unfocused and focused again.

Reviewed-by: YeongJong Lee <yj34.lee@samsung.com>
Differential Revision: https://phab.enlightenment.org/D7451

src/lib/elementary/elm_gengrid.c
src/lib/elementary/elm_gengrid.eo
src/lib/elementary/elm_genlist.c
src/lib/elementary/elm_genlist.eo
src/lib/elementary_tizen/elm_genlist.c

index 197d132..3dd5fca 100644 (file)
@@ -5333,12 +5333,23 @@ _elm_gengrid_efl_ui_focus_manager_setup_on_first_touch(Eo *obj, Elm_Gengrid_Data
           }
         else
           {
-             //Just set evas focus on the gengrid itself, events will pass on and some element will be taken
-             evas_object_focus_set(obj, EINA_TRUE);
+             efl_ui_focus_object_focus_set(obj, EINA_TRUE);
           }
       }
 }
 
+EOLIAN static Efl_Ui_Focus_Object*
+_elm_gengrid_efl_ui_focus_manager_manager_focus_get(const Eo *obj, Elm_Gengrid_Data *pd)
+{
+   Eo *focused_obj = efl_ui_focus_manager_focus_get(efl_super(obj, MY_CLASS));
+   Eo *registered_manager = efl_ui_focus_object_focus_manager_get(obj);
+
+   if (!focused_obj && efl_ui_focus_manager_redirect_get(registered_manager))
+     return (Efl_Ui_Focus_Object*) obj;
+
+   return focused_obj;
+}
+
 static void
 _gengrid_element_focused(void *data, const Efl_Event *ev)
 {
index 05adb17..8019934 100644 (file)
@@ -534,6 +534,8 @@ class Elm.Gengrid (Efl.Ui.Layout, Efl.Ui.Focus.Composition, Elm.Interface_Scroll
       Efl.Ui.Focus.Composition.prepare;
       Efl.Ui.Widget.focus_state_apply;
       Efl.Ui.Focus.Manager.setup_on_first_touch;
+      Efl.Ui.Focus.Manager.manager_focus { get; }
+
       //TIZEN ONLY (20151009) : Accessibility: updated highlight change during gengrid scroll
       Elm.Interface_Scrollable.content_pos_set;
       //
index 06cf3b2..02adf9c 100644 (file)
@@ -3587,11 +3587,23 @@ _elm_genlist_efl_ui_focus_manager_setup_on_first_touch(Eo *obj, Elm_Genlist_Data
         else
           {
              //Just set evas focus on the genlist itself, events will pass on and a other element will be taken
-             evas_object_focus_set(obj, EINA_TRUE);
+             efl_ui_focus_object_focus_set(obj, EINA_TRUE);
           }
       }
 }
 
+EOLIAN static Efl_Ui_Focus_Object*
+_elm_genlist_efl_ui_focus_manager_manager_focus_get(const Eo *obj, Elm_Genlist_Data *pd)
+{
+   Eo *focused_obj = efl_ui_focus_manager_focus_get(efl_super(obj, MY_CLASS));
+   Eo *registered_manager = efl_ui_focus_object_focus_manager_get(obj);
+
+   if (!focused_obj && efl_ui_focus_manager_redirect_get(registered_manager))
+     return (Efl_Ui_Focus_Object*) obj;
+
+   return focused_obj;
+}
+
 EOLIAN static Eina_Bool
 _elm_genlist_efl_ui_focus_object_on_focus_update(Eo *obj, Elm_Genlist_Data *sd)
 {
index 7a15955..e8a352b 100644 (file)
@@ -701,6 +701,7 @@ class Elm.Genlist (Efl.Ui.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable,
       Efl.Access.Selection.access_selection_clear;
       Efl.Ui.Widget.focus_state_apply;
       Efl.Ui.Focus.Manager.setup_on_first_touch;
+      Efl.Ui.Focus.Manager.manager_focus { get; }
 
       //TIZEN_ONLY(20171114) genlist: enhance accessibility scroll & highlight
       Elm.Interface_Scrollable.content_pos_set;
@@ -710,7 +711,6 @@ class Elm.Genlist (Efl.Ui.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable,
       Efl.Ui.Widget.focus_next_manager_is;
       Efl.Ui.Widget.focus_next;
       //
-
    }
    events {
       item,focused: Efl.Object; [[Called when genlist item got focus]]
index 1111bda..e4a9787 100644 (file)
@@ -4374,6 +4374,23 @@ _elm_genlist_efl_ui_focus_manager_setup_on_first_touch(Eo *obj, Elm_Genlist_Data
             efl_ui_focus_manager_focus_set(obj, eo_it);
           }
      }
+   else
+     {
+        efl_ui_focus_object_focus_set(obj, EINA_TRUE);
+     }
+}
+
+EOLIAN static Efl_Ui_Focus_Object*
+_elm_genlist_efl_ui_focus_manager_manager_focus_get(const Eo *obj, Elm_Genlist_Data *pd)
+{
+   Eo *focused_obj = efl_ui_focus_manager_focus_get(efl_super(obj, MY_CLASS));
+   Eo *registered_manager = efl_ui_focus_object_focus_manager_get(obj);
+
+   if (!focused_obj && efl_ui_focus_manager_redirect_get(registered_manager))
+     return (Efl_Ui_Focus_Object*) obj;
+
+
+   return focused_obj;
 }
 
 EOLIAN static Eina_Bool