forked from enlightenment/efl
elm_toolbar: make the manager customisable
so the toolbar items can be registered correctly
This commit is contained in:
parent
ac703d8229
commit
124586c8e4
|
@ -14,20 +14,27 @@ typedef struct {
|
|||
Eina_List *order, *targets_ordered;
|
||||
Eina_List *register_target, *registered_targets;
|
||||
Eina_List *adapters;
|
||||
Efl_Ui_Focus_Manager *registered;
|
||||
Efl_Ui_Focus_Manager *registered, *custom_manager;
|
||||
Eina_Bool dirty;
|
||||
} Efl_Ui_Focus_Composition_Data;
|
||||
|
||||
static void
|
||||
_state_apply(Eo *obj, Efl_Ui_Focus_Composition_Data *pd)
|
||||
{
|
||||
Efl_Ui_Focus_Manager *manager;
|
||||
|
||||
if (pd->custom_manager)
|
||||
manager = pd->custom_manager;
|
||||
else
|
||||
manager = pd->registered;
|
||||
|
||||
if (!pd->registered && pd->registered_targets)
|
||||
{
|
||||
Efl_Ui_Focus_Object *o;
|
||||
//remove all of them
|
||||
EINA_LIST_FREE(pd->registered_targets, o)
|
||||
{
|
||||
efl_ui_focus_manager_calc_unregister(pd->registered, o);
|
||||
efl_ui_focus_manager_calc_unregister(manager, o);
|
||||
}
|
||||
}
|
||||
else if (pd->registered)
|
||||
|
@ -37,16 +44,16 @@ _state_apply(Eo *obj, Efl_Ui_Focus_Composition_Data *pd)
|
|||
//remove all of them
|
||||
EINA_LIST_FREE(pd->registered_targets, o)
|
||||
{
|
||||
efl_ui_focus_manager_calc_unregister(pd->registered, o);
|
||||
efl_ui_focus_manager_calc_unregister(manager, o);
|
||||
}
|
||||
|
||||
EINA_LIST_FOREACH(pd->register_target, n, o)
|
||||
{
|
||||
efl_ui_focus_manager_calc_register(pd->registered, o, obj, NULL);
|
||||
efl_ui_focus_manager_calc_register(manager, o, obj, NULL);
|
||||
pd->registered_targets = eina_list_append(pd->registered_targets, o);
|
||||
}
|
||||
|
||||
efl_ui_focus_manager_calc_update_order(pd->registered, obj, eina_list_clone(pd->targets_ordered));
|
||||
efl_ui_focus_manager_calc_update_order(manager, obj, eina_list_clone(pd->targets_ordered));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -155,6 +162,19 @@ _efl_ui_focus_composition_efl_ui_focus_object_prepare_logical(Eo *obj, Efl_Ui_Fo
|
|||
pd->dirty = EINA_FALSE;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_focus_composition_custom_manager_set(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Composition_Data *pd, Efl_Ui_Focus_Manager *custom_manager)
|
||||
{
|
||||
pd->custom_manager = custom_manager;
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Ui_Focus_Manager*
|
||||
_efl_ui_focus_composition_custom_manager_get(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Composition_Data *pd)
|
||||
{
|
||||
return pd->custom_manager;
|
||||
}
|
||||
|
||||
|
||||
#include "efl_ui_focus_composition.eo.c"
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -29,6 +29,12 @@ mixin Efl.Ui.Focus.Composition (Efl.Interface, Elm.Widget ) {
|
|||
You can use this function to call composition_elements.
|
||||
]]
|
||||
}
|
||||
@property custom_manager @protected {
|
||||
[[Every widget will be registered in this manager]]
|
||||
values {
|
||||
custom_manager : Efl.Ui.Focus.Manager;
|
||||
}
|
||||
}
|
||||
}
|
||||
implements {
|
||||
Elm.Widget.focus_state_apply;
|
||||
|
|
|
@ -2966,6 +2966,8 @@ _elm_toolbar_efl_object_constructor(Eo *obj, Elm_Toolbar_Data *_pd EINA_UNUSED)
|
|||
evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
|
||||
elm_interface_atspi_accessible_role_set(obj, ELM_ATSPI_ROLE_TOOL_BAR);
|
||||
|
||||
efl_ui_focus_composition_custom_manager_set(obj, obj);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue