diff --git a/src/lib/elementary/elc_fileselector.c b/src/lib/elementary/elc_fileselector.c index 30cdf9003b..117e3c87bf 100644 --- a/src/lib/elementary/elc_fileselector.c +++ b/src/lib/elementary/elc_fileselector.c @@ -3118,9 +3118,9 @@ _elm_fileselector_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm } EOLIAN static Eina_Bool -_elm_fileselector_elm_widget_focus_register(Eo *obj, Elm_Fileselector_Data *pd, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full) +_elm_fileselector_elm_widget_focus_register(Eo *obj, Elm_Fileselector_Data *pd, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag) { - Eina_Bool ret = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, full); + Eina_Bool ret = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, logical_flag); _focus_chain_update(obj, pd); diff --git a/src/lib/elementary/elm_box.c b/src/lib/elementary/elm_box.c index ed1fd9bfb6..2944096d6b 100644 --- a/src/lib/elementary/elm_box.c +++ b/src/lib/elementary/elm_box.c @@ -718,9 +718,9 @@ _elm_box_class_constructor(Efl_Class *klass) evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); } EOLIAN Eina_Bool -_elm_box_elm_widget_focus_register(Eo *obj, Elm_Box_Data *pd, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full) +_elm_box_elm_widget_focus_register(Eo *obj, Elm_Box_Data *pd, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag) { - Eina_Bool result = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, full); + Eina_Bool result = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, logical_flag); //later registering children are automatically set into the order of the internal table _focus_order_flush(obj, pd); diff --git a/src/lib/elementary/elm_scroller.c b/src/lib/elementary/elm_scroller.c index 5e59830e13..d736884fa2 100644 --- a/src/lib/elementary/elm_scroller.c +++ b/src/lib/elementary/elm_scroller.c @@ -1431,12 +1431,11 @@ _elm_scroller_class_constructor(Efl_Class *klass) } EOLIAN static Eina_Bool -_elm_scroller_elm_widget_focus_register(Eo *obj, Elm_Scroller_Data *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full EINA_UNUSED) +_elm_scroller_elm_widget_focus_register(Eo *obj, Elm_Scroller_Data *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag) { //undepended from logical or not we always reigster as full with ourself as redirect - efl_ui_focus_manager_register_logical(manager, obj, logical, obj); - - return EINA_FALSE; + *logical_flag = EINA_TRUE; + return efl_ui_focus_manager_register_logical(manager, obj, logical, obj); } diff --git a/src/lib/elementary/elm_table.c b/src/lib/elementary/elm_table.c index 7b3d00ef2e..907265e8c4 100644 --- a/src/lib/elementary/elm_table.c +++ b/src/lib/elementary/elm_table.c @@ -417,9 +417,9 @@ _elm_table_efl_canvas_group_group_calculate(Eo *obj, void *pd EINA_UNUSED) } EOLIAN Eina_Bool -_elm_table_elm_widget_focus_register(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full) +_elm_table_elm_widget_focus_register(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag) { - Eina_Bool result = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, full); + Eina_Bool result = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, logical_flag); //later registering children are automatically set into the order of the internal table _focus_order_flush(obj); diff --git a/src/lib/elementary/elm_toolbar.c b/src/lib/elementary/elm_toolbar.c index dd189506ee..db3e70ca7e 100644 --- a/src/lib/elementary/elm_toolbar.c +++ b/src/lib/elementary/elm_toolbar.c @@ -3087,10 +3087,10 @@ elm_toolbar_add(Evas_Object *parent) } EOLIAN static Eina_Bool -_elm_toolbar_elm_widget_focus_register(Eo *obj, Elm_Toolbar_Data *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full EINA_UNUSED) +_elm_toolbar_elm_widget_focus_register(Eo *obj, Elm_Toolbar_Data *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag) { - efl_ui_focus_manager_register_logical(manager, obj, logical, NULL); - return EINA_FALSE; + *logical_flag = EINA_TRUE; + return efl_ui_focus_manager_register_logical(manager, obj, logical, NULL); } EOLIAN static Eo * diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c index bf2d91d8a2..6ff93fa136 100644 --- a/src/lib/elementary/elm_widget.c +++ b/src/lib/elementary/elm_widget.c @@ -276,15 +276,13 @@ _focus_manager_eval(Eo *obj, Elm_Widget_Smart_Data *pd) EOLIAN static Eina_Bool _elm_widget_focus_register(Eo *obj, Elm_Widget_Smart_Data *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, - Efl_Ui_Focus_Object *logical, Eina_Bool full) + Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag) { - if (full) - efl_ui_focus_manager_register(manager, obj, logical, NULL); + if (!*logical_flag) + return efl_ui_focus_manager_register(manager, obj, logical, NULL); else - efl_ui_focus_manager_register_logical(manager, obj, logical, NULL); - - return full; + return efl_ui_focus_manager_register_logical(manager, obj, logical, NULL); } @@ -344,8 +342,13 @@ _focus_state_eval(Eo *obj, Elm_Widget_Smart_Data *pd) if (!pd->logical.parent) return; - pd->focus.logical = - !elm_obj_widget_focus_register(obj, pd->focus.manager, pd->logical.parent, want_full); + pd->focus.logical = !want_full; + + if (!elm_obj_widget_focus_register(obj, pd->focus.manager, + pd->logical.parent, &pd->focus.logical)) + { + pd->focus.manager = NULL; + } } } else if (!should && pd->focus.manager) diff --git a/src/lib/elementary/elm_widget.eo b/src/lib/elementary/elm_widget.eo index 81aabea33f..07c02d0193 100644 --- a/src/lib/elementary/elm_widget.eo +++ b/src/lib/elementary/elm_widget.eo @@ -766,9 +766,9 @@ abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible, params { manager : Efl.Ui.Focus.Manager; [[The manager to register against]] logical : Efl.Ui.Focus.Object; [[The logical parent to use]] - full : bool; [[flag if this should register full or just logical]] + logical_flag : ptr(bool); [[reference to the flag indicating if the should be logical or not change this flag to the value you have it registered]] } - return : bool; [[return if it registered fully or not]] + return : bool; [[return $true or $false if the registration was successfull or not]] } focus_manager_factory { [[If the widget needs a manager, this function is called